Published site at 83d1bf16672c10c2075afeb2b8bc110633f7db51.
diff --git a/acid-semantics.html b/acid-semantics.html
index 539d8be..74a3c28 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -456,7 +456,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 677c516..f0391a7 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
Binary files differ
diff --git a/apidocs/deprecated-list.html b/apidocs/deprecated-list.html
index 9d0e0c7..4a78683 100644
--- a/apidocs/deprecated-list.html
+++ b/apidocs/deprecated-list.html
@@ -685,64 +685,58 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#isSmall--">org.apache.hadoop.hbase.client.Scan.isSmall()</a>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>Scan.setSmall(boolean)</code></a></span></div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RegionInfo.html#isSplitParent--">org.apache.hadoop.hbase.client.RegionInfo.isSplitParent()</a>
 <div class="block"><span class="deprecationComment">since 3.0.0 and will be removed in 4.0.0, Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#isSplit--"><code>RegionInfo.isSplit()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#mergeRegions-byte:A-byte:A-boolean-">org.apache.hadoop.hbase.client.AsyncAdmin.mergeRegions(byte[], byte[], boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.3.0 and will be removed in 4.0.0.Use <a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#mergeRegions-java.util.List-boolean-"><code>AsyncAdmin.mergeRegions(List, boolean)</code></a>
              instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#mergeRegionsAsync-byte:A-byte:A-boolean-">org.apache.hadoop.hbase.client.Admin.mergeRegionsAsync(byte[], byte[], boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.3.0 and will be removed in 4.0.0. Multi-region merge feature is now
              supported. Use <a href="org/apache/hadoop/hbase/client/Admin.html#mergeRegionsAsync-byte:A:A-boolean-"><code>Admin.mergeRegionsAsync(byte[][], boolean)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#move-byte:A-byte:A-">org.apache.hadoop.hbase.client.Admin.move(byte[], byte[])</a>
 <div class="block"><span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#move-byte:A-org.apache.hadoop.hbase.ServerName-"><code>Admin.move(byte[], ServerName)</code></a>
    instead. And if you want to move the region to a random server, please use
    <a href="org/apache/hadoop/hbase/client/Admin.html#move-byte:A-"><code>Admin.move(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#opertationTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutatorParams.opertationTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 2.3.0, will be removed in 4.0.0. Use <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#operationTimeout-int-"><code>BufferedMutatorParams.operationTimeout(int)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html#removeTable-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.rsgroup.RSGroupInfo.removeTable(TableName)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. The rsgroup information will be stored in
              the configuration of a table so this will be removed.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.retrieveGetCounterWithStringsParams(TaskAttemptContext)</a>
 <div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">org.apache.hadoop.hbase.client.Scan.setAsyncPrefetch(boolean)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. After building sync client upon async
              client, the implementation is always 'async prefetch', so this flag is useless now.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setOperationTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setOperationTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">org.apache.hadoop.hbase.client.Scan.setRowPrefixFilter(byte[])</a>
 <div class="block"><span class="deprecationComment">since 3.0.0. The scan result might be unexpected in some cases.
    e.g. startRow : "112" and rowPrefixFilter : "11"
@@ -751,45 +745,31 @@
    but does not take care of the scenario where startRow has been set.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setRpcTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setRpcTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.Scan.setSmall(boolean)</a>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</td>
-</tr>
 <tr class="rowColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.Scan.setTimeStamp(long)</a>
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#setWriteBufferPeriodicFlushTimerTickMs-long-">org.apache.hadoop.hbase.client.BufferedMutatorParams.setWriteBufferPeriodicFlushTimerTickMs(long)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. We use a common timer in the whole client
              implementation so you can not set it any more.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#unassign-byte:A-boolean-">org.apache.hadoop.hbase.client.AsyncAdmin.unassign(byte[], boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.4.0 and will be removed in 4.0.0. Use <a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#unassign-byte:A-"><code>AsyncAdmin.unassign(byte[])</code></a>
    instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#unassign-byte:A-boolean-">org.apache.hadoop.hbase.client.Admin.unassign(byte[], boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.4.0 and will be removed in 4.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#unassign-byte:A-"><code>Admin.unassign(byte[])</code></a>
    instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.updateCounters(ScanMetrics, long, Method, TaskAttemptContext, long)</a>
 <div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
    Use <a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 794a04f..e4d1e6e 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -9444,13 +9444,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/types/Union4.html#isSkippable--">isSkippable()</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="org/apache/hadoop/hbase/types/Union4.html" title="class in org.apache.hadoop.hbase.types">Union4</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>Scan.setSmall(boolean)</code></a></span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#isSnapshotCleanupEnabled--">isSnapshotCleanupEnabled()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Query the current state of the auto snapshot cleanup based on TTL.</div>
@@ -14553,15 +14546,6 @@
 <div class="block">
  Sets whether we should preserve order when replicating, i.e, serial replication.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setSplitEnabled-boolean-">setSplitEnabled(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/SimpleTotalOrderPartitioner.html#setStartKey-org.apache.hadoop.conf.Configuration-byte:A-">setStartKey(Configuration, byte[])</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/SimpleTotalOrderPartitioner.html" title="class in org.apache.hadoop.hbase.mapreduce">SimpleTotalOrderPartitioner</a></dt>
@@ -14661,13 +14645,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Put.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Get versions of columns with the specified timestamp.</div>
diff --git a/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html b/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 0de43af..f8610c5 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -123,7 +123,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1022">Scan.ReadType</a>
+public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.953">Scan.ReadType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&gt;</pre>
 </li>
 </ul>
@@ -214,7 +214,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">DEFAULT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">DEFAULT</a></pre>
 </li>
 </ul>
 <a name="STREAM">
@@ -223,7 +223,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STREAM</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">STREAM</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">STREAM</a></pre>
 </li>
 </ul>
 <a name="PREAD">
@@ -232,7 +232,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PREAD</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">PREAD</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">PREAD</a></pre>
 </li>
 </ul>
 </li>
diff --git a/apidocs/org/apache/hadoop/hbase/client/Scan.html b/apidocs/org/apache/hadoop/hbase/client/Scan.html
index 3120725..42b82c7 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Scan.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Scan.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":42,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":42,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":42,"i62":10,"i63":42,"i64":10,"i65":10,"i66":42,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10};
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":42,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":42,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -421,47 +421,38 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i30" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall</a></span>()</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>setSmall(boolean)</code></a></span></div>
-</div>
-</td>
-</tr>
-<tr id="i31" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#numFamilies--">numFamilies</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--">readAllVersions</a></span>()</code>
 <div class="block">Get all available versions.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-">readVersions</a></span>(int&nbsp;versions)</code>
 <div class="block">Get up to the specified number of versions of each column.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.util.Map-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
       org.apache.hadoop.hbase.security.access.Permission&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-">setAllowPartialResults</a></span>(boolean&nbsp;allowPartialResults)</code>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">setAsyncPrefetch</a></span>(boolean&nbsp;asyncPrefetch)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -470,38 +461,38 @@
 </div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAttribute-java.lang.String-byte:A-">setAttribute</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
             byte[]&nbsp;value)</code>
 <div class="block">Sets an attribute.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">setAuthorizations</a></span>(org.apache.hadoop.hbase.security.visibility.Authorizations&nbsp;authorizations)</code>
 <div class="block">Sets the authorizations to be used by this Query</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setBatch-int-">setBatch</a></span>(int&nbsp;batch)</code>
 <div class="block">Set the maximum number of cells to return for each call to next().</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCacheBlocks-boolean-">setCacheBlocks</a></span>(boolean&nbsp;cacheBlocks)</code>
 <div class="block">Set whether blocks should be cached for this Scan.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCaching-int-">setCaching</a></span>(int&nbsp;caching)</code>
 <div class="block">Set the number of rows for caching that will be passed to scanners.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setColumnFamilyTimeRange-byte:A-long-long-">setColumnFamilyTimeRange</a></span>(byte[]&nbsp;cf,
                         long&nbsp;minStamp,
@@ -510,109 +501,109 @@
  [minStamp, maxStamp) on a per CF bases.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">setConsistency</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</code>
 <div class="block">Sets the consistency level for this operation</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFamilyMap-java.util.Map-">setFamilyMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</code>
 <div class="block">Setting the familyMap</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">setFilter</a></span>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</code>
 <div class="block">Apply the specified server-side filter when performing the Query.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setId-java.lang.String-">setId</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</code>
 <div class="block">This method allows you to set an identifier on an operation.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">setIsolationLevel</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</code>
 <div class="block">Set the isolation level for this query.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-">setLimit</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the limit of rows for this scan.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLoadColumnFamiliesOnDemand-boolean-">setLoadColumnFamiliesOnDemand</a></span>(boolean&nbsp;value)</code>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false).</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-">setMaxResultSize</a></span>(long&nbsp;maxResultSize)</code>
 <div class="block">Set the maximum result size.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultsPerColumnFamily-int-">setMaxResultsPerColumnFamily</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setNeedCursorResult-boolean-">setNeedCursorResult</a></span>(boolean&nbsp;needCursorResult)</code>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setOneRowLimit--">setOneRowLimit</a></span>()</code>
 <div class="block">Call this when you only want to get one row.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRaw-boolean-">setRaw</a></span>(boolean&nbsp;raw)</code>
 <div class="block">Enable/disable "raw" mode for this scan.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">setReadType</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</code>
 <div class="block">Set the read type for this scan.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReplicaId-int-">setReplicaId</a></span>(int&nbsp;Id)</code>
 <div class="block">Specify region replica id where Query will fetch data from.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReversed-boolean-">setReversed</a></span>(boolean&nbsp;reversed)</code>
 <div class="block">Set whether this scan is a reversed one</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowOffsetPerColumnFamily-int-">setRowOffsetPerColumnFamily</a></span>(int&nbsp;offset)</code>
 <div class="block">Set offset for the row per Column Family.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">setRowPrefixFilter</a></span>(byte[]&nbsp;rowPrefix)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -624,24 +615,13 @@
 </div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setScanMetricsEnabled-boolean-">setScanMetricsEnabled</a></span>(boolean&nbsp;enabled)</code>
 <div class="block">Enable collection of <code>ScanMetrics</code>.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</td>
-</tr>
-<tr id="i64" class="altColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a></span>(long&nbsp;minStamp,
             long&nbsp;maxStamp)</code>
@@ -649,48 +629,39 @@
  [minStamp, maxStamp).</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp</a></span>(long&nbsp;timestamp)</code>
 <div class="block">Get versions of columns with the specified timestamp.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-</div>
-</td>
-</tr>
-<tr id="i67" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#toMap-int-">toMap</a></span>(int&nbsp;maxCols)</code>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a></span>(byte[]&nbsp;startRow)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-boolean-">withStartRow</a></span>(byte[]&nbsp;startRow,
             boolean&nbsp;inclusive)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-">withStopRow</a></span>(byte[]&nbsp;stopRow)</code>
 <div class="block">Set the stop row of the scan.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-boolean-">withStopRow</a></span>(byte[]&nbsp;stopRow,
            boolean&nbsp;inclusive)</code>
@@ -798,7 +769,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.180">Scan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.169">Scan</a>()</pre>
 <div class="block">Create a Scan operation across all rows.</div>
 </li>
 </ul>
@@ -808,7 +779,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.188">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.177">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a new instance of this class while copying all values.</div>
 <dl>
@@ -825,7 +796,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.240">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.228">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)</pre>
 <div class="block">Builds a scan object with the same specs as get.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -847,7 +818,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isGetScan</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.268">isGetScan</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.256">isGetScan</a>()</pre>
 </li>
 </ul>
 <a name="addFamily-byte:A-">
@@ -856,7 +827,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.280">addFamily</a>(byte[]&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.268">addFamily</a>(byte[]&nbsp;family)</pre>
 <div class="block">Get all columns from the specified family.
  <p>
  Overrides previous calls to addColumn for this family.</div>
@@ -874,7 +845,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.294">addColumn</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.282">addColumn</a>(byte[]&nbsp;family,
                       byte[]&nbsp;qualifier)</pre>
 <div class="block">Get the column from the specified family with the specified qualifier.
  <p>
@@ -894,7 +865,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.318">setTimeRange</a>(long&nbsp;minStamp,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.306">setTimeRange</a>(long&nbsp;minStamp,
                          long&nbsp;maxStamp)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get versions of columns only within the specified timestamp range,
@@ -915,41 +886,13 @@
 </dl>
 </li>
 </ul>
-<a name="setTimeStamp-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setTimeStamp</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.336">setTimeStamp</a>(long&nbsp;timestamp)
-                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-<div class="block">Get versions of columns with the specified timestamp. Note, default maximum
- versions to return is 1.  If your time range spans more than one version
- and you want all versions returned, up the number of versions beyond the
- defaut.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>timestamp</code> - version timestamp</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>this</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--"><code>readAllVersions()</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-"><code>readVersions(int)</code></a></dd>
-</dl>
-</li>
-</ul>
 <a name="setTimestamp-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimestamp</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.351">setTimestamp</a>(long&nbsp;timestamp)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.321">setTimestamp</a>(long&nbsp;timestamp)</pre>
 <div class="block">Get versions of columns with the specified timestamp. Note, default maximum
  versions to return is 1.  If your time range spans more than one version
  and you want all versions returned, up the number of versions beyond the
@@ -971,7 +914,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamilyTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.363">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.333">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
                                      long&nbsp;minStamp,
                                      long&nbsp;maxStamp)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setColumnFamilyTimeRange-byte:A-long-long-">Query</a></code></span></div>
@@ -998,7 +941,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.377">withStartRow</a>(byte[]&nbsp;startRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.347">withStartRow</a>(byte[]&nbsp;startRow)</pre>
 <div class="block">Set the start row of the scan.
  <p>
  If the specified row does not exist, the Scanner will start from the next closest row after the
@@ -1020,7 +963,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.395">withStartRow</a>(byte[]&nbsp;startRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.365">withStartRow</a>(byte[]&nbsp;startRow,
                          boolean&nbsp;inclusive)</pre>
 <div class="block">Set the start row of the scan.
  <p>
@@ -1047,7 +990,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.418">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.388">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
 <div class="block">Set the stop row of the scan.
  <p>
  The scan will include rows that are lexicographically less than the provided stopRow.
@@ -1072,7 +1015,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.433">withStopRow</a>(byte[]&nbsp;stopRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.403">withStopRow</a>(byte[]&nbsp;stopRow,
                         boolean&nbsp;inclusive)</pre>
 <div class="block">Set the stop row of the scan.
  <p>
@@ -1097,7 +1040,7 @@
 <li class="blockList">
 <h4>setRowPrefixFilter</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.460">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.430">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 3.0.0. The scan result might be unexpected in some cases.
    e.g. startRow : "112" and rowPrefixFilter : "11"
    The Result of this scan might contains : "111"
@@ -1124,7 +1067,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readAllVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.475">readAllVersions</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.445">readAllVersions</a>()</pre>
 <div class="block">Get all available versions.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1138,7 +1081,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.485">readVersions</a>(int&nbsp;versions)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.455">readVersions</a>(int&nbsp;versions)</pre>
 <div class="block">Get up to the specified number of versions of each column.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1154,7 +1097,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatch</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.499">setBatch</a>(int&nbsp;batch)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.469">setBatch</a>(int&nbsp;batch)</pre>
 <div class="block">Set the maximum number of cells to return for each call to next(). Callers should be aware
  that this is not equivalent to calling <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-"><code>setAllowPartialResults(boolean)</code></a>.
  If you don't allow partial results, the number of cells in each Result must equal to your
@@ -1174,7 +1117,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.513">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.483">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1188,7 +1131,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.522">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.492">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
 <div class="block">Set offset for the row per Column Family.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1202,7 +1145,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCaching</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.534">setCaching</a>(int&nbsp;caching)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.504">setCaching</a>(int&nbsp;caching)</pre>
 <div class="block">Set the number of rows for caching that will be passed to scanners.
  If not set, the Configuration setting <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#HBASE_CLIENT_SCANNER_CACHING"><code>HConstants.HBASE_CLIENT_SCANNER_CACHING</code></a> will
  apply.
@@ -1219,7 +1162,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.542">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.512">getMaxResultSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the maximum result size in bytes. See <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-"><code>setMaxResultSize(long)</code></a></dd>
@@ -1232,7 +1175,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.553">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.523">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
 <div class="block">Set the maximum result size. The default is -1; this means that no specific
  maximum result size will be set for this scan, and the global configured
  value will be used instead. (Defaults to unlimited).</div>
@@ -1248,7 +1191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.559">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.529">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">Query</a></code></span></div>
 <div class="block">Apply the specified server-side filter when performing the Query. Only
  <a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html#filterCell-org.apache.hadoop.hbase.Cell-"><code>Filter.filterCell(org.apache.hadoop.hbase.Cell)</code></a> is called AFTER all tests for ttl,
@@ -1269,7 +1212,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.569">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.539">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
 <div class="block">Setting the familyMap</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1285,7 +1228,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.578">getFamilyMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.548">getFamilyMap</a>()</pre>
 <div class="block">Getting the familyMap</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1299,7 +1242,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.585">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.555">numFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of families in familyMap</dd>
@@ -1312,7 +1255,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamilies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.595">hasFamilies</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.565">hasFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if familyMap is non empty, false otherwise</dd>
@@ -1325,7 +1268,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilies</h4>
-<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.602">getFamilies</a>()</pre>
+<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.572">getFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the keys of the familyMap</dd>
@@ -1338,7 +1281,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.612">getStartRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.582">getStartRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the startrow</dd>
@@ -1351,7 +1294,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStartRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.619">includeStartRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.589">includeStartRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>if we should include start row when scan</dd>
@@ -1364,7 +1307,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStopRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.626">getStopRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.596">getStopRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the stoprow</dd>
@@ -1377,7 +1320,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStopRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.633">includeStopRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.603">includeStopRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>if we should include stop row when scan</dd>
@@ -1390,7 +1333,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxVersions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.640">getMaxVersions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.610">getMaxVersions</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the max number of versions to fetch</dd>
@@ -1403,7 +1346,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.647">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.617">getBatch</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>maximum number of values to return for a single call to next()</dd>
@@ -1416,7 +1359,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.654">getMaxResultsPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.624">getMaxResultsPerColumnFamily</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>maximum number of values to return per row per CF</dd>
@@ -1429,7 +1372,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.663">getRowOffsetPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.633">getRowOffsetPerColumnFamily</a>()</pre>
 <div class="block">Method for retrieving the scan's offset per row per column
  family (#kvs to be skipped)</div>
 <dl>
@@ -1444,7 +1387,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaching</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.670">getCaching</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.640">getCaching</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>caching the number of rows fetched when calling next on a scanner</dd>
@@ -1457,7 +1400,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.677">getTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.647">getTimeRange</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>TimeRange</dd>
@@ -1470,7 +1413,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.685">getFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.655">getFilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getFilter--">getFilter</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -1485,7 +1428,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.692">hasFilter</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.662">hasFilter</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true is a filter has been specified, false if not</dd>
@@ -1498,7 +1441,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCacheBlocks</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.706">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.676">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
 <div class="block">Set whether blocks should be cached for this Scan.
  <p>
  This is true by default.  When true, default settings of the table and
@@ -1517,7 +1460,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheBlocks</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.716">getCacheBlocks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.686">getCacheBlocks</a>()</pre>
 <div class="block">Get whether blocks should be cached for this Scan.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1532,7 +1475,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReversed</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.728">setReversed</a>(boolean&nbsp;reversed)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.698">setReversed</a>(boolean&nbsp;reversed)</pre>
 <div class="block">Set whether this scan is a reversed one
  <p>
  This is false by default which means forward(normal) scan.</div>
@@ -1550,7 +1493,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReversed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.737">isReversed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.707">isReversed</a>()</pre>
 <div class="block">Get whether this scan is a reversed one.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1564,7 +1507,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAllowPartialResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.751">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.721">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.
  By default this value is false and the complete results will be assembled client side
@@ -1586,7 +1529,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllowPartialResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.761">getAllowPartialResults</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.731">getAllowPartialResults</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the constructor of this scan understands that the results they will see may
@@ -1601,7 +1544,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLoadColumnFamiliesOnDemand</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.766">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.736">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setLoadColumnFamiliesOnDemand-boolean-">Query</a></code></span></div>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false). On-demand CF loading doesn't load column families until necessary, e.g.
@@ -1629,7 +1572,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFingerprint</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.777">getFingerprint</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.747">getFingerprint</a>()</pre>
 <div class="block">Compile the table and column family (i.e. schema) information
  into a String. Useful for parsing and aggregation by debugging,
  logging, and administration tools.</div>
@@ -1647,7 +1590,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.801">toMap</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.771">toMap</a>(int&nbsp;maxCols)</pre>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.
  Useful for debugging, logging, and administration tools.</div>
@@ -1667,7 +1610,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRaw</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.864">setRaw</a>(boolean&nbsp;raw)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.834">setRaw</a>(boolean&nbsp;raw)</pre>
 <div class="block">Enable/disable "raw" mode for this scan.
  If "raw" is enabled the scan will return all
  delete marker and deleted rows that have not
@@ -1687,69 +1630,20 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.872">isRaw</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.842">isRaw</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if this Scan is in "raw" mode.</dd>
 </dl>
 </li>
 </ul>
-<a name="setSmall-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.896">setSmall</a>(boolean&nbsp;small)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-<div class="block">Set whether this scan is a small scan
- <p>
- Small scan should use pread and big scan can use seek + read seek + read is fast but can cause
- two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for
- non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,
- if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the
- better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one
- data block(64KB), it could be considered as a small scan.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>small</code> - </dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a>, 
-<a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
-<a name="isSmall--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.912">isSmall</a>()</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>setSmall(boolean)</code></a></span></div>
-<div class="block">Get whether this scan is a small scan</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if small scan</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
 <a name="setAttribute-java.lang.String-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.917">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.848">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                          byte[]&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute-java.lang.String-byte:A-">Attributes</a></code></span></div>
 <div class="block">Sets an attribute.
@@ -1772,7 +1666,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.922">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.853">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId-java.lang.String-">OperationWithAttributes</a></code></span></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -1793,7 +1687,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAuthorizations</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.927">setAuthorizations</a>(org.apache.hadoop.hbase.security.visibility.Authorizations&nbsp;authorizations)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.858">setAuthorizations</a>(org.apache.hadoop.hbase.security.visibility.Authorizations&nbsp;authorizations)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">Query</a></code></span></div>
 <div class="block">Sets the authorizations to be used by this Query</div>
 <dl>
@@ -1808,7 +1702,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.932">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.863">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setACL-java.util.Map-">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -1823,7 +1717,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.937">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.868">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                    org.apache.hadoop.hbase.security.access.Permission&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1840,7 +1734,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setConsistency</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.942">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.873">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">Query</a></code></span></div>
 <div class="block">Sets the consistency level for this operation</div>
 <dl>
@@ -1857,7 +1751,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicaId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.947">setReplicaId</a>(int&nbsp;Id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.878">setReplicaId</a>(int&nbsp;Id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setReplicaId-int-">Query</a></code></span></div>
 <div class="block">Specify region replica id where Query will fetch data from. Use this together with
  <a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-"><code>Query.setConsistency(Consistency)</code></a> passing <a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html#TIMELINE"><code>Consistency.TIMELINE</code></a> to read data from
@@ -1875,7 +1769,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setIsolationLevel</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.952">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.883">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">Query</a></code></span></div>
 <div class="block">Set the isolation level for this query. If the
  isolation level is set to READ_UNCOMMITTED, then
@@ -1899,7 +1793,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.957">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.888">setPriority</a>(int&nbsp;priority)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setPriority-int-">setPriority</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html" title="class in org.apache.hadoop.hbase.client">OperationWithAttributes</a></code></dd>
@@ -1912,7 +1806,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setScanMetricsEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.965">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.896">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
 <div class="block">Enable collection of <code>ScanMetrics</code>. For advanced users.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1926,7 +1820,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isScanMetricsEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.973">isScanMetricsEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.904">isScanMetricsEnabled</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if collection of scan metrics is enabled. For advanced users.</dd>
@@ -1939,7 +1833,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isAsyncPrefetch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.978">isAsyncPrefetch</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.909">isAsyncPrefetch</a>()</pre>
 </li>
 </ul>
 <a name="setAsyncPrefetch-boolean-">
@@ -1949,7 +1843,7 @@
 <li class="blockList">
 <h4>setAsyncPrefetch</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.987">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.918">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. After building sync client upon async
              client, the implementation is always 'async prefetch', so this flag is useless now.</span></div>
 </li>
@@ -1960,7 +1854,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLimit</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.995">getLimit</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.926">getLimit</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the limit of rows for this scan</dd>
@@ -1973,7 +1867,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1007">setLimit</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.938">setLimit</a>(int&nbsp;limit)</pre>
 <div class="block">Set the limit of rows for this scan. We will terminate the scan if the number of returned rows
  reaches this value.
  <p>
@@ -1992,7 +1886,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setOneRowLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1017">setOneRowLimit</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.948">setOneRowLimit</a>()</pre>
 <div class="block">Call this when you only want to get one row. It will set <code>limit</code> to <code>1</code>, and also
  set <code>readType</code> to <a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html#PREAD"><code>Scan.ReadType.PREAD</code></a>.</div>
 <dl>
@@ -2007,7 +1901,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1029">getReadType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.960">getReadType</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the read type for this scan</dd>
@@ -2020,7 +1914,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1040">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.971">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
 <div class="block">Set the read type for this scan.
  <p>
  Notice that we may choose to use pread even if you specific <a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html#STREAM"><code>Scan.ReadType.STREAM</code></a> here. For
@@ -2037,7 +1931,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setNeedCursorResult</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1086">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1017">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout. However the scanner will return a Result
  only when client can do it. So if there are many heartbeats, the blocking time on
@@ -2063,7 +1957,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isNeedCursorResult</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1091">isNeedCursorResult</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1022">isNeedCursorResult</a>()</pre>
 </li>
 </ul>
 <a name="createScanFromCursor-org.apache.hadoop.hbase.client.Cursor-">
@@ -2072,7 +1966,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createScanFromCursor</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1102">createScanFromCursor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&nbsp;cursor)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1033">createScanFromCursor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&nbsp;cursor)</pre>
 <div class="block">Create a new Scan with a cursor. It only set the position information like start row key.
  The others (like cfs, stop row, limit) should still be filled in by the user.
  <a href="../../../../../org/apache/hadoop/hbase/client/Result.html#isCursor--"><code>Result.isCursor()</code></a>
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html b/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
index 3ba3fe8..f65f56b 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
@@ -316,38 +316,18 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a></span>(long&nbsp;minStamp,
             long&nbsp;maxStamp)</code>
 <div class="block">Get versions of columns only within the specified timestamp range,
  [minStamp, maxStamp).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp</a></span>(long&nbsp;timestamp)</code>
 <div class="block">Get versions of columns with the specified timestamp.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-</div>
-</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a></span>(byte[]&nbsp;startRow)</code>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 5fe1313..fe87f3a 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -153,964 +153,895 @@
 <span class="sourceLineNo">145</span>  public static final boolean DEFAULT_HBASE_CLIENT_SCANNER_ASYNC_PREFETCH = false;<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
 <span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Set it true for small scan to get better performance Small scan should use pread and big scan<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * cause too much network io [89-fb] Using pread for non-compaction read request<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * would do openScanner,next,closeScanner in one RPC call. It means the better performance for<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * small scan. [HBASE-9488]. Generally, if the scan range is within one data block(64KB), it could<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * be considered as a small scan.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private boolean small = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * the mvcc is only valid within region scope.<a name="line.160"></a>
+<span class="sourceLineNo">148</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the mvcc is only valid within region scope.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private long mvccReadPoint = -1L;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * rows reaches this value.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int limit = -1;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Control whether to use pread at server side.<a name="line.160"></a>
 <span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private long mvccReadPoint = -1L;<a name="line.162"></a>
+<span class="sourceLineNo">162</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * rows reaches this value.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private int limit = -1;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Control whether to use pread at server side.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  private boolean needCursorResult = false;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Create a Scan operation across all rows.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public Scan() {}<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  /**<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Creates a new instance of this class while copying all values.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param scan  The scan instance to copy from.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @throws IOException When copying the values fails.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public Scan(Scan scan) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    startRow = scan.getStartRow();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    includeStartRow = scan.includeStartRow();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    stopRow  = scan.getStopRow();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    includeStopRow = scan.includeStopRow();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    maxVersions = scan.getMaxVersions();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    batch = scan.getBatch();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    caching = scan.getCaching();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    maxResultSize = scan.getMaxResultSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    filter = scan.getFilter(); // clone?<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    consistency = scan.getConsistency();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    reversed = scan.isReversed();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    small = scan.isSmall();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      byte [] fam = entry.getKey();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (byte[] col : cols) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          addColumn(fam, col);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      } else {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        addFamily(fam);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      TimeRange tr = entry.getValue();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.limit = scan.getLimit();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    setPriority(scan.getPriority());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    readType = scan.getReadType();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    super.setReplicaId(scan.getReplicaId());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Builds a scan object with the same specs as get.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param get get to model scan after<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public Scan(Get get) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    this.startRow = get.getRow();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.includeStartRow = true;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.stopRow = get.getRow();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.includeStopRow = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this.filter = get.getFilter();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    this.maxVersions = get.getMaxVersions();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    this.tr = get.getTimeRange();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.familyMap = get.getFamilyMap();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.asyncPrefetch = false;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    this.consistency = get.getConsistency();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      TimeRange tr = entry.getValue();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.mvccReadPoint = -1L;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    setPriority(get.getPriority());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    super.setReplicaId(get.getReplicaId());<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>  public boolean isGetScan() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Get all columns from the specified family.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * &lt;p&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * Overrides previous calls to addColumn for this family.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param family family name<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @return this<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public Scan addFamily(byte [] family) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    familyMap.remove(family);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    familyMap.put(family, null);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return this;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Get the column from the specified family with the specified qualifier.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * &lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Overrides previous calls to addFamily for this family.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param family family name<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param qualifier column qualifier<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @return this<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if(set == null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      familyMap.put(family, set);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (qualifier == null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    set.add(qualifier);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return this;<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>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Get versions of columns only within the specified timestamp range,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * your time range spans more than one version and you want all versions<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * returned, up the number of versions beyond the default.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @see #readAllVersions()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @see #readVersions(int)<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return this<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return this;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * defaut.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param timestamp version timestamp<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @see #readAllVersions()<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @see #readVersions(int)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @return this<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *             Use {@link #setTimestamp(long)} instead<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Deprecated<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Scan setTimeStamp(long timestamp)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.setTimestamp(timestamp);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * defaut.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * @param timestamp version timestamp<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @see #readAllVersions()<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @see #readVersions(int)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  public Scan setTimestamp(long timestamp) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tr = TimeRange.at(timestamp);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } catch(Exception e) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throw e;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Set the start row of the scan.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;p&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * specified row.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param startRow row to start scanner at or after<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @return this<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Scan withStartRow(byte[] startRow) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return withStartRow(startRow, true);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Set the start row of the scan.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * &lt;p&gt;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * will start from the next closest row after the specified row.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * &lt;p&gt;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * &lt;/p&gt;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param startRow row to start scanner at or after<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param inclusive whether we should include the start row when scan<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @return this<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.startRow = startRow;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.includeStartRow = inclusive;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * Set the stop row of the scan.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * &lt;p&gt;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * &lt;/p&gt;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param stopRow row to end at (exclusive)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return this<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return withStopRow(stopRow, false);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * Set the stop row of the scan.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * &lt;p&gt;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param stopRow row to end at<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @param inclusive whether we should include the stop row when scan<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @return this<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.436"></a>
+<span class="sourceLineNo">164</span>  private boolean needCursorResult = false;<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create a Scan operation across all rows.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Scan() {}<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Creates a new instance of this class while copying all values.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param scan  The scan instance to copy from.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @throws IOException When copying the values fails.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Scan(Scan scan) throws IOException {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    startRow = scan.getStartRow();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    includeStartRow = scan.includeStartRow();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    stopRow  = scan.getStopRow();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    includeStopRow = scan.includeStopRow();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    maxVersions = scan.getMaxVersions();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    batch = scan.getBatch();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    caching = scan.getCaching();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    maxResultSize = scan.getMaxResultSize();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    filter = scan.getFilter(); // clone?<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    consistency = scan.getConsistency();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    reversed = scan.isReversed();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      byte [] fam = entry.getKey();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        for (byte[] col : cols) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          addColumn(fam, col);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        addFamily(fam);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TimeRange tr = entry.getValue();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.limit = scan.getLimit();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    setPriority(scan.getPriority());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    readType = scan.getReadType();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    super.setReplicaId(scan.getReplicaId());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * Builds a scan object with the same specs as get.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param get get to model scan after<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public Scan(Get get) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.startRow = get.getRow();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    this.includeStartRow = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.stopRow = get.getRow();<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.includeStopRow = true;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this.filter = get.getFilter();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    this.maxVersions = get.getMaxVersions();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.tr = get.getTimeRange();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.familyMap = get.getFamilyMap();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.asyncPrefetch = false;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.consistency = get.getConsistency();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      TimeRange tr = entry.getValue();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.mvccReadPoint = -1L;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    setPriority(get.getPriority());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    super.setReplicaId(get.getReplicaId());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public boolean isGetScan() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<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>   * Get all columns from the specified family.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Overrides previous calls to addColumn for this family.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * @param family family name<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return this<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public Scan addFamily(byte [] family) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    familyMap.remove(family);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    familyMap.put(family, null);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Get the column from the specified family with the specified qualifier.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * &lt;p&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Overrides previous calls to addFamily for this family.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param family family name<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param qualifier column qualifier<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return this<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    if(set == null) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      familyMap.put(family, set);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (qualifier == null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    set.add(qualifier);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * Get versions of columns only within the specified timestamp range,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * your time range spans more than one version and you want all versions<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * returned, up the number of versions beyond the default.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @see #readAllVersions()<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see #readVersions(int)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @return this<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * defaut.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param timestamp version timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @see #readAllVersions()<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #readVersions(int)<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @return this<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public Scan setTimestamp(long timestamp) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      tr = TimeRange.at(timestamp);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } catch(Exception e) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      throw e;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * Set the start row of the scan.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * specified row.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param startRow row to start scanner at or after<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @return this<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public Scan withStartRow(byte[] startRow) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    return withStartRow(startRow, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Set the start row of the scan.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * &lt;p&gt;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * will start from the next closest row after the specified row.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * &lt;p&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * &lt;/p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @param startRow row to start scanner at or after<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @param inclusive whether we should include the start row when scan<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return this<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    this.startRow = startRow;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    this.includeStartRow = inclusive;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    return this;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Set the stop row of the scan.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * &lt;p&gt;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * &lt;p&gt;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;/p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param stopRow row to end at (exclusive)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return this<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return withStopRow(stopRow, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Set the stop row of the scan.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * &lt;p&gt;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param stopRow row to end at<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param inclusive whether we should include the stop row when scan<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return this<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.stopRow = stopRow;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    this.includeStopRow = inclusive;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return this;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return this<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *   The Result of this scan might contains : "111"<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  @Deprecated<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (rowPrefix == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    } else {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      this.withStartRow(rowPrefix);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.436"></a>
 <span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    this.stopRow = stopRow;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    this.includeStopRow = inclusive;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return this;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @return this<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   *   The Result of this scan might contains : "111"<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  @Deprecated<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    if (rowPrefix == null) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.withStartRow(rowPrefix);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return this;<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>   * Get all available versions.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @return this<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public Scan readAllVersions() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    return this;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Get up to the specified number of versions of each column.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param versions specified number of versions for each column<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @return this<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public Scan readVersions(int versions) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    this.maxVersions = versions;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return this;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param batch the maximum number of values<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public Scan setBatch(int batch) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      throw new IncompatibleFilterException(<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        "Cannot set batch on a scan using a filter" +<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        " that returns true for filter.hasFilterRow");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    this.batch = batch;<a name="line.505"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * Get all available versions.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return this<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  public Scan readAllVersions() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * Get up to the specified number of versions of each column.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @param versions specified number of versions for each column<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return this<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   */<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public Scan readVersions(int versions) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    this.maxVersions = versions;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return this;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<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>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param batch the maximum number of values<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  public Scan setBatch(int batch) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      throw new IncompatibleFilterException(<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        "Cannot set batch on a scan using a filter" +<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        " that returns true for filter.hasFilterRow");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.batch = batch;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * Set the maximum number of values to return per row per Column Family<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param limit the maximum number of values returned / row / CF<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    this.storeLimit = limit;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return this;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * Set offset for the row per Column Family.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * @param offset is the number of kvs that will be skipped.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.storeOffset = offset;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return this;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * apply.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param caching the number of rows for caching<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
+<span class="sourceLineNo">504</span>  public Scan setCaching(int caching) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    this.caching = caching;<a name="line.505"></a>
 <span class="sourceLineNo">506</span>    return this;<a name="line.506"></a>
 <span class="sourceLineNo">507</span>  }<a name="line.507"></a>
 <span class="sourceLineNo">508</span><a name="line.508"></a>
 <span class="sourceLineNo">509</span>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * Set the maximum number of values to return per row per Column Family<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param limit the maximum number of values returned / row / CF<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    this.storeLimit = limit;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    return this;<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>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * Set offset for the row per Column Family.<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param offset is the number of kvs that will be skipped.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    this.storeOffset = offset;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return this;<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>  /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * apply.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param caching the number of rows for caching<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public Scan setCaching(int caching) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    this.caching = caching;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  public long getMaxResultSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    return maxResultSize;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>  /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * maximum result size will be set for this scan, and the global configured<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * value will be used instead. (Defaults to unlimited).<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   *<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    this.maxResultSize = maxResultSize;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this;<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>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public Scan setFilter(Filter filter) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    super.setFilter(filter);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return this;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  /**<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * Setting the familyMap<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param familyMap map of family to qualifier<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @return this<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    this.familyMap = familyMap;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return this;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * Getting the familyMap<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @return familyMap<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    return this.familyMap;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return the number of families in familyMap<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   */<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public int numFamilies() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    if(hasFamilies()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return this.familyMap.size();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @return true if familyMap is non empty, false otherwise<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public boolean hasFamilies() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return !this.familyMap.isEmpty();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  /**<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return the keys of the familyMap<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public byte[][] getFamilies() {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if(hasFamilies()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @return the startrow<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public byte [] getStartRow() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return this.startRow;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * @return if we should include start row when scan<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  public boolean includeStartRow() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return includeStartRow;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return the stoprow<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public byte[] getStopRow() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    return this.stopRow;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @return if we should include stop row when scan<a name="line.631"></a>
+<span class="sourceLineNo">510</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  public long getMaxResultSize() {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return maxResultSize;<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<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>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * maximum result size will be set for this scan, and the global configured<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * value will be used instead. (Defaults to unlimited).<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    this.maxResultSize = maxResultSize;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public Scan setFilter(Filter filter) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    super.setFilter(filter);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return this;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * Setting the familyMap<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @param familyMap map of family to qualifier<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @return this<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    this.familyMap = familyMap;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    return this;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Getting the familyMap<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return familyMap<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return this.familyMap;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * @return the number of families in familyMap<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   */<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  public int numFamilies() {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    if(hasFamilies()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return this.familyMap.size();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    return 0;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * @return true if familyMap is non empty, false otherwise<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  public boolean hasFamilies() {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return !this.familyMap.isEmpty();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span>   * @return the keys of the familyMap<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   */<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  public byte[][] getFamilies() {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    if(hasFamilies()) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    return null;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return the startrow<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public byte [] getStartRow() {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    return this.startRow;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @return if we should include start row when scan<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public boolean includeStartRow() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return includeStartRow;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the stoprow<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public byte[] getStopRow() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return this.stopRow;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return if we should include stop row when scan<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public boolean includeStopRow() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return includeStopRow;<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>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @return the max number of versions to fetch<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  public int getMaxVersions() {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    return this.maxVersions;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @return maximum number of values to return for a single call to next()<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  public int getBatch() {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    return this.batch;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>  /**<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return maximum number of values to return per row per CF<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public int getMaxResultsPerColumnFamily() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return this.storeLimit;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Method for retrieving the scan's offset per row per column<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * family (#kvs to be skipped)<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * @return row offset<a name="line.631"></a>
 <span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean includeStopRow() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return includeStopRow;<a name="line.634"></a>
+<span class="sourceLineNo">633</span>  public int getRowOffsetPerColumnFamily() {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    return this.storeOffset;<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  }<a name="line.635"></a>
 <span class="sourceLineNo">636</span><a name="line.636"></a>
 <span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @return the max number of versions to fetch<a name="line.638"></a>
+<span class="sourceLineNo">638</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.638"></a>
 <span class="sourceLineNo">639</span>   */<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  public int getMaxVersions() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    return this.maxVersions;<a name="line.641"></a>
+<span class="sourceLineNo">640</span>  public int getCaching() {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    return this.caching;<a name="line.641"></a>
 <span class="sourceLineNo">642</span>  }<a name="line.642"></a>
 <span class="sourceLineNo">643</span><a name="line.643"></a>
 <span class="sourceLineNo">644</span>  /**<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @return maximum number of values to return for a single call to next()<a name="line.645"></a>
+<span class="sourceLineNo">645</span>   * @return TimeRange<a name="line.645"></a>
 <span class="sourceLineNo">646</span>   */<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  public int getBatch() {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return this.batch;<a name="line.648"></a>
+<span class="sourceLineNo">647</span>  public TimeRange getTimeRange() {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return this.tr;<a name="line.648"></a>
 <span class="sourceLineNo">649</span>  }<a name="line.649"></a>
 <span class="sourceLineNo">650</span><a name="line.650"></a>
 <span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * @return maximum number of values to return per row per CF<a name="line.652"></a>
+<span class="sourceLineNo">652</span>   * @return RowFilter<a name="line.652"></a>
 <span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public int getMaxResultsPerColumnFamily() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    return this.storeLimit;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * Method for retrieving the scan's offset per row per column<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * family (#kvs to be skipped)<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * @return row offset<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   */<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  public int getRowOffsetPerColumnFamily() {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    return this.storeOffset;<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>  /**<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   */<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  public int getCaching() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return this.caching;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  }<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>   * @return TimeRange<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public TimeRange getTimeRange() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return this.tr;<a name="line.678"></a>
+<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  public Filter getFilter() {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    return filter;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @return true is a filter has been specified, false if not<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
+<span class="sourceLineNo">662</span>  public boolean hasFilter() {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return filter != null;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<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>   * Set whether blocks should be cached for this Scan.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * This is true by default.  When true, default settings of the table and<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * family are used (this will never override caching blocks if the block<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * cache is disabled for that family or entirely).<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * will not be cached<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    this.cacheBlocks = cacheBlocks;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return this;<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>  /**<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   * @return RowFilter<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   */<a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Override<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public Filter getFilter() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return filter;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @return true is a filter has been specified, false if not<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean hasFilter() {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    return filter != null;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * Set whether blocks should be cached for this Scan.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   * &lt;p&gt;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * This is true by default.  When true, default settings of the table and<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * family are used (this will never override caching blocks if the block<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * cache is disabled for that family or entirely).<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * will not be cached<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.cacheBlocks = cacheBlocks;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    return this;<a name="line.708"></a>
+<span class="sourceLineNo">682</span>   * Get whether blocks should be cached for this Scan.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @return true if default caching should be used, false if blocks should not<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   * be cached<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   */<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  public boolean getCacheBlocks() {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    return cacheBlocks;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * Set whether this scan is a reversed one<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * &lt;p&gt;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * This is false by default which means forward(normal) scan.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   *<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * @param reversed if true, scan will be backward order<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return this<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  public Scan setReversed(boolean reversed) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    this.reversed = reversed;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    return this;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">702</span><a name="line.702"></a>
+<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * Get whether this scan is a reversed one.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * @return true if backward scan, false if forward(default) scan<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReversed() {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    return reversed;<a name="line.708"></a>
 <span class="sourceLineNo">709</span>  }<a name="line.709"></a>
 <span class="sourceLineNo">710</span><a name="line.710"></a>
 <span class="sourceLineNo">711</span>  /**<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * Get whether blocks should be cached for this Scan.<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * @return true if default caching should be used, false if blocks should not<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * be cached<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public boolean getCacheBlocks() {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    return cacheBlocks;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * Set whether this scan is a reversed one<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * &lt;p&gt;<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * This is false by default which means forward(normal) scan.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   *<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * @param reversed if true, scan will be backward order<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * @return this<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  public Scan setReversed(boolean reversed) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    this.reversed = reversed;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    return this;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Get whether this scan is a reversed one.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @return true if backward scan, false if forward(default) scan<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  public boolean isReversed() {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    return reversed;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>  }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>  /**<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * By default this value is false and the complete results will be assembled client side<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * before being delivered to the caller.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param allowPartialResults<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return this<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @see #setBatch(int)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    this.allowPartialResults = allowPartialResults;<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return this;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   */<a name="line.760"></a>
-<span class="sourceLineNo">761</span>  public boolean getAllowPartialResults() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return allowPartialResults;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  @Override<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>  /**<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * Compile the table and column family (i.e. schema) information<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * logging, and administration tools.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @return Map<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   */<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  @Override<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    if(this.familyMap.isEmpty()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      map.put("families", "ALL");<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      return map;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      map.put("families", families);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        this.familyMap.entrySet()) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    return map;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  /**<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * Useful for debugging, logging, and administration tools.<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return Map<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  @Override<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    // start with the fingerpring map and build on top of it<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // map from families to column list replaces fingerprint's list of families<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    map.put("families", familyColumns);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // add scalar information first<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    map.put("maxVersions", this.maxVersions);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    map.put("batch", this.batch);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    map.put("caching", this.caching);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    timeRange.add(this.tr.getMin());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    timeRange.add(this.tr.getMax());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    map.put("timeRange", timeRange);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    int colCount = 0;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    // iterate through affected families and list out up to maxCols columns<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      this.familyMap.entrySet()) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      if(entry.getValue() == null) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        colCount++;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        --maxCols;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        columns.add("ALL");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      } else {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>        colCount += entry.getValue().size();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        if (maxCols &lt;= 0) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          continue;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>        for (byte [] column : entry.getValue()) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          if (--maxCols &lt;= 0) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            continue;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          columns.add(Bytes.toStringBinary(column));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        }<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    map.put("totalColumns", colCount);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    if (this.filter != null) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      map.put("filter", this.filter.toString());<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    // add the id if set<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (getId() != null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      map.put("id", getId());<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return map;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Enable/disable "raw" mode for this scan.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * If "raw" is enabled the scan will return all<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * delete marker and deleted rows that have not<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * been collected, yet.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * This is mostly useful for Scan on column families<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * It is an error to specify any column when "raw" is set.<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  public Scan setRaw(boolean raw) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    return this;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @return True if this Scan is in "raw" mode.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   */<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  public boolean isRaw() {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.874"></a>
+<span class="sourceLineNo">712</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * By default this value is false and the complete results will be assembled client side<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * before being delivered to the caller.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param allowPartialResults<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   * @return this<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   * @see #setBatch(int)<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    this.allowPartialResults = allowPartialResults;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    return this;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span>  /**<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public boolean getAllowPartialResults() {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    return allowPartialResults;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
+<span class="sourceLineNo">736</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Compile the table and column family (i.e. schema) information<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   * logging, and administration tools.<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   * @return Map<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Override<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    if(this.familyMap.isEmpty()) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      map.put("families", "ALL");<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      return map;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    } else {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      map.put("families", families);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        this.familyMap.entrySet()) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    return map;<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * Useful for debugging, logging, and administration tools.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @return Map<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  @Override<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    // start with the fingerpring map and build on top of it<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    // map from families to column list replaces fingerprint's list of families<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    map.put("families", familyColumns);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    // add scalar information first<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    map.put("maxVersions", this.maxVersions);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    map.put("batch", this.batch);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    map.put("caching", this.caching);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    timeRange.add(this.tr.getMin());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    timeRange.add(this.tr.getMax());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    map.put("timeRange", timeRange);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    int colCount = 0;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // iterate through affected families and list out up to maxCols columns<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      this.familyMap.entrySet()) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      if(entry.getValue() == null) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        colCount++;<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        --maxCols;<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        columns.add("ALL");<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      } else {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        colCount += entry.getValue().size();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        if (maxCols &lt;= 0) {<a name="line.802"></a>
+<span class="sourceLineNo">803</span>          continue;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        for (byte [] column : entry.getValue()) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>          if (--maxCols &lt;= 0) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>            continue;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
+<span class="sourceLineNo">809</span>          columns.add(Bytes.toStringBinary(column));<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>    }<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    map.put("totalColumns", colCount);<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    if (this.filter != null) {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      map.put("filter", this.filter.toString());<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // add the id if set<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (getId() != null) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      map.put("id", getId());<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    return map;<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>  /**<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * Enable/disable "raw" mode for this scan.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * If "raw" is enabled the scan will return all<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * delete marker and deleted rows that have not<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * been collected, yet.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * This is mostly useful for Scan on column families<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * It is an error to specify any column when "raw" is set.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   */<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public Scan setRaw(boolean raw) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    return this;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  }<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>   * @return True if this Scan is in "raw" mode.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   */<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  public boolean isRaw() {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>  @Override<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    return (Scan) super.setAttribute(name, value);<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>  @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public Scan setId(String id) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    return (Scan) super.setId(id);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>  }<a name="line.860"></a>
+<span class="sourceLineNo">861</span><a name="line.861"></a>
+<span class="sourceLineNo">862</span>  @Override<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    return (Scan) super.setACL(perms);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
+<span class="sourceLineNo">866</span><a name="line.866"></a>
+<span class="sourceLineNo">867</span>  @Override<a name="line.867"></a>
+<span class="sourceLineNo">868</span>  public Scan setACL(String user, Permission perms) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    return (Scan) super.setACL(user, perms);<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>  @Override<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  public Scan setConsistency(Consistency consistency) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    return (Scan) super.setConsistency(consistency);<a name="line.874"></a>
 <span class="sourceLineNo">875</span>  }<a name="line.875"></a>
 <span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * Set whether this scan is a small scan<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Small scan should use pread and big scan can use seek + read seek + read is fast but can cause<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * data block(64KB), it could be considered as a small scan.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * @param small<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Use {@link #setLimit(int)} and<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   *   {@link #setReadType(ReadType)} instead. And for the one rpc optimization, now we will also<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   *   fetch data when openScanner, and if the number of rows reaches the limit then we will close<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   *   the scanner automatically which means we will fall back to one rpc.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @see #setLimit(int)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @see #setReadType(ReadType)<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  @Deprecated<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  public Scan setSmall(boolean small) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.small = small;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (small) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      this.readType = ReadType.PREAD;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return this;<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Get whether this scan is a small scan<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * @return true if small scan<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. See the comment of<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   *   {@link #setSmall(boolean)}<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  @Deprecated<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  public boolean isSmall() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    return small;<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>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return (Scan) super.setAttribute(name, value);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>  }<a name="line.919"></a>
-<span class="sourceLineNo">920</span><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  @Override<a name="line.921"></a>
-<span class="sourceLineNo">922</span>  public Scan setId(String id) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    return (Scan) super.setId(id);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  @Override<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    return (Scan) super.setACL(perms);<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>  @Override<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  public Scan setACL(String user, Permission perms) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    return (Scan) super.setACL(user, perms);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  @Override<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  public Scan setConsistency(Consistency consistency) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    return (Scan) super.setConsistency(consistency);<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Override<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  public Scan setReplicaId(int Id) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return (Scan) super.setReplicaId(Id);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return (Scan) super.setIsolationLevel(level);<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>  @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  public Scan setPriority(int priority) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return (Scan) super.setPriority(priority);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return this;<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   */<a name="line.972"></a>
-<span class="sourceLineNo">973</span>  public boolean isScanMetricsEnabled() {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  public Boolean isAsyncPrefetch() {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return asyncPrefetch;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.984"></a>
+<span class="sourceLineNo">877</span>  @Override<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  public Scan setReplicaId(int Id) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    return (Scan) super.setReplicaId(Id);<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
+<span class="sourceLineNo">881</span><a name="line.881"></a>
+<span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    return (Scan) super.setIsolationLevel(level);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span>  @Override<a name="line.887"></a>
+<span class="sourceLineNo">888</span>  public Scan setPriority(int priority) {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    return (Scan) super.setPriority(priority);<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>  /**<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   */<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    return this;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span>  /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
+<span class="sourceLineNo">904</span>  public boolean isScanMetricsEnabled() {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
+<span class="sourceLineNo">908</span><a name="line.908"></a>
+<span class="sourceLineNo">909</span>  public Boolean isAsyncPrefetch() {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    return asyncPrefetch;<a name="line.910"></a>
+<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
+<span class="sourceLineNo">912</span><a name="line.912"></a>
+<span class="sourceLineNo">913</span>  /**<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
+<span class="sourceLineNo">917</span>  @Deprecated<a name="line.917"></a>
+<span class="sourceLineNo">918</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    return this;<a name="line.920"></a>
+<span class="sourceLineNo">921</span>  }<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>   * @return the limit of rows for this scan<a name="line.924"></a>
+<span class="sourceLineNo">925</span>   */<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  public int getLimit() {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    return limit;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>  }<a name="line.928"></a>
+<span class="sourceLineNo">929</span><a name="line.929"></a>
+<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * reaches this value.<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * &lt;p&gt;<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @param limit the limit of rows for this scan<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @return this<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  public Scan setLimit(int limit) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    this.limit = limit;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    return this;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>  }<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>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @return this<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  public Scan setOneRowLimit() {<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    return setLimit(1).setReadType(ReadType.PREAD);<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>  @InterfaceAudience.Public<a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public enum ReadType {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    DEFAULT, STREAM, PREAD<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>  /**<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * @return the read type for this scan<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   */<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public ReadType getReadType() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    return readType;<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>  /**<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * Set the read type for this scan.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * &lt;p&gt;<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * example, we will always use pread if this is a get scan.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   * @return this<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   */<a name="line.970"></a>
+<span class="sourceLineNo">971</span>  public Scan setReadType(ReadType readType) {<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    this.readType = readType;<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    return this;<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>  /**<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * Get the mvcc read point used to open a scanner.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  long getMvccReadPoint() {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    return mvccReadPoint;<a name="line.980"></a>
+<span class="sourceLineNo">981</span>  }<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>   * Set the mvcc read point used to open a scanner.<a name="line.984"></a>
 <span class="sourceLineNo">985</span>   */<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @Deprecated<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    return this;<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>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * @return the limit of rows for this scan<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
-<span class="sourceLineNo">995</span>  public int getLimit() {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    return limit;<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  }<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>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * reaches this value.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * &lt;p&gt;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @param limit the limit of rows for this scan<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @return this<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   */<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  public Scan setLimit(int limit) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    this.limit = limit;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    return this;<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>  /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>   * @return this<a name="line.1015"></a>
+<span class="sourceLineNo">986</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    return this;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>  }<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>   * Set the mvcc read point to -1 which means do not use it.<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   */<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  Scan resetMvccReadPoint() {<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    return setMvccReadPoint(-1L);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>  }<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>  /**<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   *<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * but users do not allow partial result.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   *<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * {@link Result#isCursor()}<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   * {@link Result#getCursor()}<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>   * {@link Cursor}<a name="line.1015"></a>
 <span class="sourceLineNo">1016</span>   */<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>  public Scan setOneRowLimit() {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    return setLimit(1).setReadType(ReadType.PREAD);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @InterfaceAudience.Public<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public enum ReadType {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    DEFAULT, STREAM, PREAD<a name="line.1023"></a>
+<span class="sourceLineNo">1017</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    this.needCursorResult = needCursorResult;<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    return this;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>  public boolean isNeedCursorResult() {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    return needCursorResult;<a name="line.1023"></a>
 <span class="sourceLineNo">1024</span>  }<a name="line.1024"></a>
 <span class="sourceLineNo">1025</span><a name="line.1025"></a>
 <span class="sourceLineNo">1026</span>  /**<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @return the read type for this scan<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   */<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>  public ReadType getReadType() {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    return readType;<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  }<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  /**<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * Set the read type for this scan.<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * &lt;p&gt;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   * example, we will always use pread if this is a get scan.<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * @return this<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   */<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  public Scan setReadType(ReadType readType) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.readType = readType;<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    return this;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  /**<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>   * Get the mvcc read point used to open a scanner.<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>   */<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  long getMvccReadPoint() {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    return mvccReadPoint;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  /**<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * Set the mvcc read point used to open a scanner.<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   */<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    return this;<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>  /**<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * Set the mvcc read point to -1 which means do not use it.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  Scan resetMvccReadPoint() {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    return setMvccReadPoint(-1L);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>  }<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>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   *<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>   *<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>   * but users do not allow partial result.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>   *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>   * {@link Result#isCursor()}<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   * {@link Result#getCursor()}<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   * {@link Cursor}<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   */<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    this.needCursorResult = needCursorResult;<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    return this;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span><a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public boolean isNeedCursorResult() {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    return needCursorResult;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>  }<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>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * {@link Result#isCursor()}<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * {@link Result#getCursor()}<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * {@link Cursor}<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>}<a name="line.1105"></a>
+<span class="sourceLineNo">1027</span>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * {@link Result#isCursor()}<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * {@link Result#getCursor()}<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   * {@link Cursor}<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   */<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>}<a name="line.1036"></a>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
index 5fe1313..fe87f3a 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
@@ -153,964 +153,895 @@
 <span class="sourceLineNo">145</span>  public static final boolean DEFAULT_HBASE_CLIENT_SCANNER_ASYNC_PREFETCH = false;<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
 <span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Set it true for small scan to get better performance Small scan should use pread and big scan<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * cause too much network io [89-fb] Using pread for non-compaction read request<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * would do openScanner,next,closeScanner in one RPC call. It means the better performance for<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * small scan. [HBASE-9488]. Generally, if the scan range is within one data block(64KB), it could<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * be considered as a small scan.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private boolean small = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * the mvcc is only valid within region scope.<a name="line.160"></a>
+<span class="sourceLineNo">148</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the mvcc is only valid within region scope.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private long mvccReadPoint = -1L;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * rows reaches this value.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int limit = -1;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Control whether to use pread at server side.<a name="line.160"></a>
 <span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private long mvccReadPoint = -1L;<a name="line.162"></a>
+<span class="sourceLineNo">162</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * rows reaches this value.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private int limit = -1;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Control whether to use pread at server side.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  private boolean needCursorResult = false;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Create a Scan operation across all rows.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public Scan() {}<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  /**<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Creates a new instance of this class while copying all values.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param scan  The scan instance to copy from.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @throws IOException When copying the values fails.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public Scan(Scan scan) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    startRow = scan.getStartRow();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    includeStartRow = scan.includeStartRow();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    stopRow  = scan.getStopRow();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    includeStopRow = scan.includeStopRow();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    maxVersions = scan.getMaxVersions();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    batch = scan.getBatch();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    caching = scan.getCaching();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    maxResultSize = scan.getMaxResultSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    filter = scan.getFilter(); // clone?<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    consistency = scan.getConsistency();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    reversed = scan.isReversed();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    small = scan.isSmall();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      byte [] fam = entry.getKey();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (byte[] col : cols) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          addColumn(fam, col);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      } else {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        addFamily(fam);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      TimeRange tr = entry.getValue();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.limit = scan.getLimit();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    setPriority(scan.getPriority());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    readType = scan.getReadType();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    super.setReplicaId(scan.getReplicaId());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Builds a scan object with the same specs as get.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param get get to model scan after<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public Scan(Get get) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    this.startRow = get.getRow();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.includeStartRow = true;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.stopRow = get.getRow();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.includeStopRow = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this.filter = get.getFilter();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    this.maxVersions = get.getMaxVersions();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    this.tr = get.getTimeRange();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.familyMap = get.getFamilyMap();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.asyncPrefetch = false;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    this.consistency = get.getConsistency();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      TimeRange tr = entry.getValue();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.mvccReadPoint = -1L;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    setPriority(get.getPriority());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    super.setReplicaId(get.getReplicaId());<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>  public boolean isGetScan() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Get all columns from the specified family.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * &lt;p&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * Overrides previous calls to addColumn for this family.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param family family name<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @return this<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public Scan addFamily(byte [] family) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    familyMap.remove(family);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    familyMap.put(family, null);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return this;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Get the column from the specified family with the specified qualifier.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * &lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Overrides previous calls to addFamily for this family.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param family family name<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param qualifier column qualifier<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @return this<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if(set == null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      familyMap.put(family, set);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (qualifier == null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    set.add(qualifier);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return this;<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>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Get versions of columns only within the specified timestamp range,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * your time range spans more than one version and you want all versions<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * returned, up the number of versions beyond the default.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @see #readAllVersions()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @see #readVersions(int)<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return this<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return this;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * defaut.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param timestamp version timestamp<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @see #readAllVersions()<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @see #readVersions(int)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @return this<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *             Use {@link #setTimestamp(long)} instead<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Deprecated<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Scan setTimeStamp(long timestamp)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.setTimestamp(timestamp);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * defaut.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * @param timestamp version timestamp<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @see #readAllVersions()<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @see #readVersions(int)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  public Scan setTimestamp(long timestamp) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tr = TimeRange.at(timestamp);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } catch(Exception e) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throw e;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Set the start row of the scan.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;p&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * specified row.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param startRow row to start scanner at or after<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @return this<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Scan withStartRow(byte[] startRow) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return withStartRow(startRow, true);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Set the start row of the scan.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * &lt;p&gt;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * will start from the next closest row after the specified row.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * &lt;p&gt;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * &lt;/p&gt;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param startRow row to start scanner at or after<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param inclusive whether we should include the start row when scan<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @return this<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.startRow = startRow;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.includeStartRow = inclusive;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * Set the stop row of the scan.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * &lt;p&gt;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * &lt;/p&gt;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param stopRow row to end at (exclusive)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return this<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return withStopRow(stopRow, false);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * Set the stop row of the scan.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * &lt;p&gt;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param stopRow row to end at<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @param inclusive whether we should include the stop row when scan<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @return this<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.436"></a>
+<span class="sourceLineNo">164</span>  private boolean needCursorResult = false;<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create a Scan operation across all rows.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Scan() {}<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Creates a new instance of this class while copying all values.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param scan  The scan instance to copy from.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @throws IOException When copying the values fails.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Scan(Scan scan) throws IOException {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    startRow = scan.getStartRow();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    includeStartRow = scan.includeStartRow();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    stopRow  = scan.getStopRow();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    includeStopRow = scan.includeStopRow();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    maxVersions = scan.getMaxVersions();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    batch = scan.getBatch();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    caching = scan.getCaching();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    maxResultSize = scan.getMaxResultSize();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    filter = scan.getFilter(); // clone?<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    consistency = scan.getConsistency();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    reversed = scan.isReversed();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      byte [] fam = entry.getKey();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        for (byte[] col : cols) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          addColumn(fam, col);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        addFamily(fam);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TimeRange tr = entry.getValue();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.limit = scan.getLimit();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    setPriority(scan.getPriority());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    readType = scan.getReadType();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    super.setReplicaId(scan.getReplicaId());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * Builds a scan object with the same specs as get.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param get get to model scan after<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public Scan(Get get) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.startRow = get.getRow();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    this.includeStartRow = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.stopRow = get.getRow();<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.includeStopRow = true;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this.filter = get.getFilter();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    this.maxVersions = get.getMaxVersions();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.tr = get.getTimeRange();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.familyMap = get.getFamilyMap();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.asyncPrefetch = false;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.consistency = get.getConsistency();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      TimeRange tr = entry.getValue();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.mvccReadPoint = -1L;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    setPriority(get.getPriority());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    super.setReplicaId(get.getReplicaId());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public boolean isGetScan() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<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>   * Get all columns from the specified family.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Overrides previous calls to addColumn for this family.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * @param family family name<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return this<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public Scan addFamily(byte [] family) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    familyMap.remove(family);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    familyMap.put(family, null);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Get the column from the specified family with the specified qualifier.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * &lt;p&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Overrides previous calls to addFamily for this family.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param family family name<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param qualifier column qualifier<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return this<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    if(set == null) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      familyMap.put(family, set);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (qualifier == null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    set.add(qualifier);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * Get versions of columns only within the specified timestamp range,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * your time range spans more than one version and you want all versions<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * returned, up the number of versions beyond the default.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @see #readAllVersions()<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see #readVersions(int)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @return this<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * defaut.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param timestamp version timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @see #readAllVersions()<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #readVersions(int)<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @return this<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public Scan setTimestamp(long timestamp) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      tr = TimeRange.at(timestamp);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } catch(Exception e) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      throw e;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * Set the start row of the scan.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * specified row.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param startRow row to start scanner at or after<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @return this<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public Scan withStartRow(byte[] startRow) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    return withStartRow(startRow, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Set the start row of the scan.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * &lt;p&gt;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * will start from the next closest row after the specified row.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * &lt;p&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * &lt;/p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @param startRow row to start scanner at or after<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @param inclusive whether we should include the start row when scan<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return this<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    this.startRow = startRow;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    this.includeStartRow = inclusive;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    return this;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Set the stop row of the scan.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * &lt;p&gt;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * &lt;p&gt;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;/p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param stopRow row to end at (exclusive)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return this<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return withStopRow(stopRow, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Set the stop row of the scan.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * &lt;p&gt;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param stopRow row to end at<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param inclusive whether we should include the stop row when scan<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return this<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.stopRow = stopRow;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    this.includeStopRow = inclusive;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return this;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return this<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *   The Result of this scan might contains : "111"<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  @Deprecated<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (rowPrefix == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    } else {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      this.withStartRow(rowPrefix);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.436"></a>
 <span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    this.stopRow = stopRow;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    this.includeStopRow = inclusive;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return this;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @return this<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   *   The Result of this scan might contains : "111"<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  @Deprecated<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    if (rowPrefix == null) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.withStartRow(rowPrefix);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return this;<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>   * Get all available versions.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @return this<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public Scan readAllVersions() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    return this;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Get up to the specified number of versions of each column.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param versions specified number of versions for each column<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @return this<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public Scan readVersions(int versions) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    this.maxVersions = versions;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return this;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param batch the maximum number of values<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public Scan setBatch(int batch) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      throw new IncompatibleFilterException(<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        "Cannot set batch on a scan using a filter" +<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        " that returns true for filter.hasFilterRow");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    this.batch = batch;<a name="line.505"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * Get all available versions.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return this<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  public Scan readAllVersions() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * Get up to the specified number of versions of each column.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @param versions specified number of versions for each column<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return this<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   */<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public Scan readVersions(int versions) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    this.maxVersions = versions;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return this;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<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>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param batch the maximum number of values<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  public Scan setBatch(int batch) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      throw new IncompatibleFilterException(<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        "Cannot set batch on a scan using a filter" +<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        " that returns true for filter.hasFilterRow");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.batch = batch;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * Set the maximum number of values to return per row per Column Family<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param limit the maximum number of values returned / row / CF<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    this.storeLimit = limit;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return this;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * Set offset for the row per Column Family.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * @param offset is the number of kvs that will be skipped.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.storeOffset = offset;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return this;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * apply.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param caching the number of rows for caching<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
+<span class="sourceLineNo">504</span>  public Scan setCaching(int caching) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    this.caching = caching;<a name="line.505"></a>
 <span class="sourceLineNo">506</span>    return this;<a name="line.506"></a>
 <span class="sourceLineNo">507</span>  }<a name="line.507"></a>
 <span class="sourceLineNo">508</span><a name="line.508"></a>
 <span class="sourceLineNo">509</span>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * Set the maximum number of values to return per row per Column Family<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param limit the maximum number of values returned / row / CF<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    this.storeLimit = limit;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    return this;<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>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * Set offset for the row per Column Family.<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param offset is the number of kvs that will be skipped.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    this.storeOffset = offset;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return this;<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>  /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * apply.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param caching the number of rows for caching<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public Scan setCaching(int caching) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    this.caching = caching;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  public long getMaxResultSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    return maxResultSize;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>  /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * maximum result size will be set for this scan, and the global configured<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * value will be used instead. (Defaults to unlimited).<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   *<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    this.maxResultSize = maxResultSize;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this;<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>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public Scan setFilter(Filter filter) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    super.setFilter(filter);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return this;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  /**<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * Setting the familyMap<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param familyMap map of family to qualifier<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @return this<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    this.familyMap = familyMap;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return this;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * Getting the familyMap<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @return familyMap<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    return this.familyMap;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return the number of families in familyMap<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   */<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public int numFamilies() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    if(hasFamilies()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return this.familyMap.size();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @return true if familyMap is non empty, false otherwise<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public boolean hasFamilies() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return !this.familyMap.isEmpty();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  /**<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return the keys of the familyMap<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public byte[][] getFamilies() {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if(hasFamilies()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @return the startrow<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public byte [] getStartRow() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return this.startRow;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * @return if we should include start row when scan<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  public boolean includeStartRow() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return includeStartRow;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return the stoprow<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public byte[] getStopRow() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    return this.stopRow;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @return if we should include stop row when scan<a name="line.631"></a>
+<span class="sourceLineNo">510</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  public long getMaxResultSize() {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return maxResultSize;<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<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>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * maximum result size will be set for this scan, and the global configured<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * value will be used instead. (Defaults to unlimited).<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    this.maxResultSize = maxResultSize;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public Scan setFilter(Filter filter) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    super.setFilter(filter);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return this;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * Setting the familyMap<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @param familyMap map of family to qualifier<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @return this<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    this.familyMap = familyMap;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    return this;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Getting the familyMap<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return familyMap<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return this.familyMap;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * @return the number of families in familyMap<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   */<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  public int numFamilies() {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    if(hasFamilies()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return this.familyMap.size();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    return 0;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * @return true if familyMap is non empty, false otherwise<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  public boolean hasFamilies() {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return !this.familyMap.isEmpty();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span>   * @return the keys of the familyMap<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   */<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  public byte[][] getFamilies() {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    if(hasFamilies()) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    return null;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return the startrow<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public byte [] getStartRow() {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    return this.startRow;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @return if we should include start row when scan<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public boolean includeStartRow() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return includeStartRow;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the stoprow<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public byte[] getStopRow() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return this.stopRow;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return if we should include stop row when scan<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public boolean includeStopRow() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return includeStopRow;<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>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @return the max number of versions to fetch<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  public int getMaxVersions() {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    return this.maxVersions;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @return maximum number of values to return for a single call to next()<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  public int getBatch() {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    return this.batch;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>  /**<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return maximum number of values to return per row per CF<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public int getMaxResultsPerColumnFamily() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return this.storeLimit;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Method for retrieving the scan's offset per row per column<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * family (#kvs to be skipped)<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * @return row offset<a name="line.631"></a>
 <span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean includeStopRow() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return includeStopRow;<a name="line.634"></a>
+<span class="sourceLineNo">633</span>  public int getRowOffsetPerColumnFamily() {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    return this.storeOffset;<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  }<a name="line.635"></a>
 <span class="sourceLineNo">636</span><a name="line.636"></a>
 <span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @return the max number of versions to fetch<a name="line.638"></a>
+<span class="sourceLineNo">638</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.638"></a>
 <span class="sourceLineNo">639</span>   */<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  public int getMaxVersions() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    return this.maxVersions;<a name="line.641"></a>
+<span class="sourceLineNo">640</span>  public int getCaching() {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    return this.caching;<a name="line.641"></a>
 <span class="sourceLineNo">642</span>  }<a name="line.642"></a>
 <span class="sourceLineNo">643</span><a name="line.643"></a>
 <span class="sourceLineNo">644</span>  /**<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @return maximum number of values to return for a single call to next()<a name="line.645"></a>
+<span class="sourceLineNo">645</span>   * @return TimeRange<a name="line.645"></a>
 <span class="sourceLineNo">646</span>   */<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  public int getBatch() {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return this.batch;<a name="line.648"></a>
+<span class="sourceLineNo">647</span>  public TimeRange getTimeRange() {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return this.tr;<a name="line.648"></a>
 <span class="sourceLineNo">649</span>  }<a name="line.649"></a>
 <span class="sourceLineNo">650</span><a name="line.650"></a>
 <span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * @return maximum number of values to return per row per CF<a name="line.652"></a>
+<span class="sourceLineNo">652</span>   * @return RowFilter<a name="line.652"></a>
 <span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public int getMaxResultsPerColumnFamily() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    return this.storeLimit;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * Method for retrieving the scan's offset per row per column<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * family (#kvs to be skipped)<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * @return row offset<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   */<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  public int getRowOffsetPerColumnFamily() {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    return this.storeOffset;<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>  /**<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   */<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  public int getCaching() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return this.caching;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  }<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>   * @return TimeRange<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public TimeRange getTimeRange() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return this.tr;<a name="line.678"></a>
+<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  public Filter getFilter() {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    return filter;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @return true is a filter has been specified, false if not<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
+<span class="sourceLineNo">662</span>  public boolean hasFilter() {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return filter != null;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<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>   * Set whether blocks should be cached for this Scan.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * This is true by default.  When true, default settings of the table and<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * family are used (this will never override caching blocks if the block<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * cache is disabled for that family or entirely).<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * will not be cached<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    this.cacheBlocks = cacheBlocks;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return this;<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>  /**<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   * @return RowFilter<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   */<a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Override<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public Filter getFilter() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return filter;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @return true is a filter has been specified, false if not<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean hasFilter() {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    return filter != null;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * Set whether blocks should be cached for this Scan.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   * &lt;p&gt;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * This is true by default.  When true, default settings of the table and<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * family are used (this will never override caching blocks if the block<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * cache is disabled for that family or entirely).<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * will not be cached<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.cacheBlocks = cacheBlocks;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    return this;<a name="line.708"></a>
+<span class="sourceLineNo">682</span>   * Get whether blocks should be cached for this Scan.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @return true if default caching should be used, false if blocks should not<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   * be cached<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   */<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  public boolean getCacheBlocks() {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    return cacheBlocks;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * Set whether this scan is a reversed one<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * &lt;p&gt;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * This is false by default which means forward(normal) scan.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   *<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * @param reversed if true, scan will be backward order<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return this<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  public Scan setReversed(boolean reversed) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    this.reversed = reversed;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    return this;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">702</span><a name="line.702"></a>
+<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * Get whether this scan is a reversed one.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * @return true if backward scan, false if forward(default) scan<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReversed() {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    return reversed;<a name="line.708"></a>
 <span class="sourceLineNo">709</span>  }<a name="line.709"></a>
 <span class="sourceLineNo">710</span><a name="line.710"></a>
 <span class="sourceLineNo">711</span>  /**<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * Get whether blocks should be cached for this Scan.<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * @return true if default caching should be used, false if blocks should not<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * be cached<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public boolean getCacheBlocks() {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    return cacheBlocks;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * Set whether this scan is a reversed one<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * &lt;p&gt;<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * This is false by default which means forward(normal) scan.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   *<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * @param reversed if true, scan will be backward order<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * @return this<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  public Scan setReversed(boolean reversed) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    this.reversed = reversed;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    return this;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Get whether this scan is a reversed one.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @return true if backward scan, false if forward(default) scan<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  public boolean isReversed() {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    return reversed;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>  }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>  /**<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * By default this value is false and the complete results will be assembled client side<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * before being delivered to the caller.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param allowPartialResults<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return this<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @see #setBatch(int)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    this.allowPartialResults = allowPartialResults;<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return this;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   */<a name="line.760"></a>
-<span class="sourceLineNo">761</span>  public boolean getAllowPartialResults() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return allowPartialResults;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  @Override<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>  /**<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * Compile the table and column family (i.e. schema) information<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * logging, and administration tools.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @return Map<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   */<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  @Override<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    if(this.familyMap.isEmpty()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      map.put("families", "ALL");<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      return map;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      map.put("families", families);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        this.familyMap.entrySet()) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    return map;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  /**<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * Useful for debugging, logging, and administration tools.<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return Map<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  @Override<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    // start with the fingerpring map and build on top of it<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // map from families to column list replaces fingerprint's list of families<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    map.put("families", familyColumns);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // add scalar information first<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    map.put("maxVersions", this.maxVersions);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    map.put("batch", this.batch);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    map.put("caching", this.caching);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    timeRange.add(this.tr.getMin());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    timeRange.add(this.tr.getMax());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    map.put("timeRange", timeRange);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    int colCount = 0;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    // iterate through affected families and list out up to maxCols columns<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      this.familyMap.entrySet()) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      if(entry.getValue() == null) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        colCount++;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        --maxCols;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        columns.add("ALL");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      } else {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>        colCount += entry.getValue().size();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        if (maxCols &lt;= 0) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          continue;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>        for (byte [] column : entry.getValue()) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          if (--maxCols &lt;= 0) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            continue;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          columns.add(Bytes.toStringBinary(column));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        }<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    map.put("totalColumns", colCount);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    if (this.filter != null) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      map.put("filter", this.filter.toString());<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    // add the id if set<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (getId() != null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      map.put("id", getId());<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return map;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Enable/disable "raw" mode for this scan.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * If "raw" is enabled the scan will return all<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * delete marker and deleted rows that have not<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * been collected, yet.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * This is mostly useful for Scan on column families<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * It is an error to specify any column when "raw" is set.<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  public Scan setRaw(boolean raw) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    return this;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @return True if this Scan is in "raw" mode.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   */<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  public boolean isRaw() {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.874"></a>
+<span class="sourceLineNo">712</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * By default this value is false and the complete results will be assembled client side<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * before being delivered to the caller.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param allowPartialResults<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   * @return this<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   * @see #setBatch(int)<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    this.allowPartialResults = allowPartialResults;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    return this;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span>  /**<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public boolean getAllowPartialResults() {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    return allowPartialResults;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
+<span class="sourceLineNo">736</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Compile the table and column family (i.e. schema) information<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   * logging, and administration tools.<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   * @return Map<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Override<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    if(this.familyMap.isEmpty()) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      map.put("families", "ALL");<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      return map;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    } else {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      map.put("families", families);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        this.familyMap.entrySet()) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    return map;<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * Useful for debugging, logging, and administration tools.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @return Map<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  @Override<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    // start with the fingerpring map and build on top of it<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    // map from families to column list replaces fingerprint's list of families<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    map.put("families", familyColumns);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    // add scalar information first<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    map.put("maxVersions", this.maxVersions);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    map.put("batch", this.batch);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    map.put("caching", this.caching);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    timeRange.add(this.tr.getMin());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    timeRange.add(this.tr.getMax());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    map.put("timeRange", timeRange);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    int colCount = 0;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // iterate through affected families and list out up to maxCols columns<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      this.familyMap.entrySet()) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      if(entry.getValue() == null) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        colCount++;<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        --maxCols;<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        columns.add("ALL");<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      } else {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        colCount += entry.getValue().size();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        if (maxCols &lt;= 0) {<a name="line.802"></a>
+<span class="sourceLineNo">803</span>          continue;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        for (byte [] column : entry.getValue()) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>          if (--maxCols &lt;= 0) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>            continue;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
+<span class="sourceLineNo">809</span>          columns.add(Bytes.toStringBinary(column));<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>    }<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    map.put("totalColumns", colCount);<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    if (this.filter != null) {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      map.put("filter", this.filter.toString());<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // add the id if set<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (getId() != null) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      map.put("id", getId());<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    return map;<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>  /**<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * Enable/disable "raw" mode for this scan.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * If "raw" is enabled the scan will return all<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * delete marker and deleted rows that have not<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * been collected, yet.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * This is mostly useful for Scan on column families<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * It is an error to specify any column when "raw" is set.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   */<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public Scan setRaw(boolean raw) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    return this;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  }<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>   * @return True if this Scan is in "raw" mode.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   */<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  public boolean isRaw() {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>  @Override<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    return (Scan) super.setAttribute(name, value);<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>  @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public Scan setId(String id) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    return (Scan) super.setId(id);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>  }<a name="line.860"></a>
+<span class="sourceLineNo">861</span><a name="line.861"></a>
+<span class="sourceLineNo">862</span>  @Override<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    return (Scan) super.setACL(perms);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
+<span class="sourceLineNo">866</span><a name="line.866"></a>
+<span class="sourceLineNo">867</span>  @Override<a name="line.867"></a>
+<span class="sourceLineNo">868</span>  public Scan setACL(String user, Permission perms) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    return (Scan) super.setACL(user, perms);<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>  @Override<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  public Scan setConsistency(Consistency consistency) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    return (Scan) super.setConsistency(consistency);<a name="line.874"></a>
 <span class="sourceLineNo">875</span>  }<a name="line.875"></a>
 <span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * Set whether this scan is a small scan<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Small scan should use pread and big scan can use seek + read seek + read is fast but can cause<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * data block(64KB), it could be considered as a small scan.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * @param small<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Use {@link #setLimit(int)} and<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   *   {@link #setReadType(ReadType)} instead. And for the one rpc optimization, now we will also<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   *   fetch data when openScanner, and if the number of rows reaches the limit then we will close<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   *   the scanner automatically which means we will fall back to one rpc.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @see #setLimit(int)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @see #setReadType(ReadType)<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  @Deprecated<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  public Scan setSmall(boolean small) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.small = small;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (small) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      this.readType = ReadType.PREAD;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return this;<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Get whether this scan is a small scan<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * @return true if small scan<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. See the comment of<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   *   {@link #setSmall(boolean)}<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  @Deprecated<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  public boolean isSmall() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    return small;<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>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return (Scan) super.setAttribute(name, value);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>  }<a name="line.919"></a>
-<span class="sourceLineNo">920</span><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  @Override<a name="line.921"></a>
-<span class="sourceLineNo">922</span>  public Scan setId(String id) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    return (Scan) super.setId(id);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  @Override<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    return (Scan) super.setACL(perms);<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>  @Override<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  public Scan setACL(String user, Permission perms) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    return (Scan) super.setACL(user, perms);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  @Override<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  public Scan setConsistency(Consistency consistency) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    return (Scan) super.setConsistency(consistency);<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Override<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  public Scan setReplicaId(int Id) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return (Scan) super.setReplicaId(Id);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return (Scan) super.setIsolationLevel(level);<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>  @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  public Scan setPriority(int priority) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return (Scan) super.setPriority(priority);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return this;<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   */<a name="line.972"></a>
-<span class="sourceLineNo">973</span>  public boolean isScanMetricsEnabled() {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  public Boolean isAsyncPrefetch() {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return asyncPrefetch;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.984"></a>
+<span class="sourceLineNo">877</span>  @Override<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  public Scan setReplicaId(int Id) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    return (Scan) super.setReplicaId(Id);<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
+<span class="sourceLineNo">881</span><a name="line.881"></a>
+<span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    return (Scan) super.setIsolationLevel(level);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span>  @Override<a name="line.887"></a>
+<span class="sourceLineNo">888</span>  public Scan setPriority(int priority) {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    return (Scan) super.setPriority(priority);<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>  /**<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   */<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    return this;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span>  /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
+<span class="sourceLineNo">904</span>  public boolean isScanMetricsEnabled() {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
+<span class="sourceLineNo">908</span><a name="line.908"></a>
+<span class="sourceLineNo">909</span>  public Boolean isAsyncPrefetch() {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    return asyncPrefetch;<a name="line.910"></a>
+<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
+<span class="sourceLineNo">912</span><a name="line.912"></a>
+<span class="sourceLineNo">913</span>  /**<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
+<span class="sourceLineNo">917</span>  @Deprecated<a name="line.917"></a>
+<span class="sourceLineNo">918</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    return this;<a name="line.920"></a>
+<span class="sourceLineNo">921</span>  }<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>   * @return the limit of rows for this scan<a name="line.924"></a>
+<span class="sourceLineNo">925</span>   */<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  public int getLimit() {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    return limit;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>  }<a name="line.928"></a>
+<span class="sourceLineNo">929</span><a name="line.929"></a>
+<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * reaches this value.<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * &lt;p&gt;<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @param limit the limit of rows for this scan<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @return this<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  public Scan setLimit(int limit) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    this.limit = limit;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    return this;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>  }<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>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @return this<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  public Scan setOneRowLimit() {<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    return setLimit(1).setReadType(ReadType.PREAD);<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>  @InterfaceAudience.Public<a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public enum ReadType {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    DEFAULT, STREAM, PREAD<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>  /**<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * @return the read type for this scan<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   */<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public ReadType getReadType() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    return readType;<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>  /**<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * Set the read type for this scan.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * &lt;p&gt;<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * example, we will always use pread if this is a get scan.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   * @return this<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   */<a name="line.970"></a>
+<span class="sourceLineNo">971</span>  public Scan setReadType(ReadType readType) {<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    this.readType = readType;<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    return this;<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>  /**<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * Get the mvcc read point used to open a scanner.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  long getMvccReadPoint() {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    return mvccReadPoint;<a name="line.980"></a>
+<span class="sourceLineNo">981</span>  }<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>   * Set the mvcc read point used to open a scanner.<a name="line.984"></a>
 <span class="sourceLineNo">985</span>   */<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @Deprecated<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    return this;<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>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * @return the limit of rows for this scan<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
-<span class="sourceLineNo">995</span>  public int getLimit() {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    return limit;<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  }<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>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * reaches this value.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * &lt;p&gt;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @param limit the limit of rows for this scan<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @return this<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   */<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  public Scan setLimit(int limit) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    this.limit = limit;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    return this;<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>  /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>   * @return this<a name="line.1015"></a>
+<span class="sourceLineNo">986</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    return this;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>  }<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>   * Set the mvcc read point to -1 which means do not use it.<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   */<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  Scan resetMvccReadPoint() {<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    return setMvccReadPoint(-1L);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>  }<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>  /**<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   *<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * but users do not allow partial result.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   *<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * {@link Result#isCursor()}<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   * {@link Result#getCursor()}<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>   * {@link Cursor}<a name="line.1015"></a>
 <span class="sourceLineNo">1016</span>   */<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>  public Scan setOneRowLimit() {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    return setLimit(1).setReadType(ReadType.PREAD);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @InterfaceAudience.Public<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public enum ReadType {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    DEFAULT, STREAM, PREAD<a name="line.1023"></a>
+<span class="sourceLineNo">1017</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    this.needCursorResult = needCursorResult;<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    return this;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>  public boolean isNeedCursorResult() {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    return needCursorResult;<a name="line.1023"></a>
 <span class="sourceLineNo">1024</span>  }<a name="line.1024"></a>
 <span class="sourceLineNo">1025</span><a name="line.1025"></a>
 <span class="sourceLineNo">1026</span>  /**<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @return the read type for this scan<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   */<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>  public ReadType getReadType() {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    return readType;<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  }<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  /**<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * Set the read type for this scan.<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * &lt;p&gt;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   * example, we will always use pread if this is a get scan.<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * @return this<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   */<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  public Scan setReadType(ReadType readType) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.readType = readType;<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    return this;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  /**<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>   * Get the mvcc read point used to open a scanner.<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>   */<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  long getMvccReadPoint() {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    return mvccReadPoint;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  /**<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * Set the mvcc read point used to open a scanner.<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   */<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    return this;<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>  /**<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * Set the mvcc read point to -1 which means do not use it.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  Scan resetMvccReadPoint() {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    return setMvccReadPoint(-1L);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>  }<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>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   *<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>   *<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>   * but users do not allow partial result.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>   *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>   * {@link Result#isCursor()}<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   * {@link Result#getCursor()}<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   * {@link Cursor}<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   */<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    this.needCursorResult = needCursorResult;<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    return this;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span><a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public boolean isNeedCursorResult() {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    return needCursorResult;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>  }<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>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * {@link Result#isCursor()}<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * {@link Result#getCursor()}<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * {@link Cursor}<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>}<a name="line.1105"></a>
+<span class="sourceLineNo">1027</span>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * {@link Result#isCursor()}<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * {@link Result#getCursor()}<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   * {@link Cursor}<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   */<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>}<a name="line.1036"></a>
 
 
 
diff --git a/book.html b/book.html
index 05f6c1f..6e6c1fe 100644
--- a/book.html
+++ b/book.html
@@ -46170,7 +46170,7 @@
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-alpha-1<br>
-Last updated 2021-07-14 20:05:51 UTC
+Last updated 2021-07-16 20:05:47 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index d938d5b..16fe9d9 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -161,7 +161,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 428e4df..fbb7695 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -158,7 +158,7 @@
 <td>4444</td>
 <td>0</td>
 <td>0</td>
-<td>8863</td></tr></table></div>
+<td>8857</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -871,7 +871,7 @@
 <td><a href="#org.apache.hadoop.hbase.client.Scan.java">org/apache/hadoop/hbase/client/Scan.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>5</td></tr>
+<td>3</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.SimpleRequestController.java">org/apache/hadoop/hbase/client/SimpleRequestController.java</a></td>
 <td>0</td>
@@ -1036,7 +1036,7 @@
 <td><a href="#org.apache.hadoop.hbase.client.TestImmutableScan.java">org/apache/hadoop/hbase/client/TestImmutableScan.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>2</td></tr>
+<td>1</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestIncrementsFromClientSide.java">org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.java</a></td>
 <td>0</td>
@@ -1128,6146 +1128,6141 @@
 <td>0</td>
 <td>3</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.client.TestSmallReversedScanner.java">org/apache/hadoop/hbase/client/TestSmallReversedScanner.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>3</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotCloneIndependence.java">org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotDFSTemporaryDirectory.java">org/apache/hadoop/hbase/client/TestSnapshotDFSTemporaryDirectory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestSnapshotFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotMetadata.java">org/apache/hadoop/hbase/client/TestSnapshotMetadata.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotTemporaryDirectory.java">org/apache/hadoop/hbase/client/TestSnapshotTemporaryDirectory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestTableShell.java">org/apache/hadoop/hbase/client/TestTableShell.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestTableSnapshotScanner.java">org/apache/hadoop/hbase/client/TestTableSnapshotScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestTimestampsFilter.java">org/apache/hadoop/hbase/client/TestTimestampsFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.VersionInfoUtil.java">org/apache/hadoop/hbase/client/VersionInfoUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory.java">org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.backoff.ServerStatistics.java">org/apache/hadoop/hbase/client/backoff/ServerStatistics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.Batch.java">org/apache/hadoop/hbase/client/coprocessor/Batch.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.DoubleColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/DoubleColumnInterpreter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/LongColumnInterpreter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.package-info.java">org/apache/hadoop/hbase/client/coprocessor/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.example.AsyncClientExample.java">org/apache/hadoop/hbase/client/example/AsyncClientExample.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.locking.EntityLock.java">org/apache/hadoop/hbase/client/locking/EntityLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.locking.TestEntityLocks.java">org/apache/hadoop/hbase/client/locking/TestEntityLocks.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.metrics.ScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ScanMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.BaseDecoder.java">org/apache/hadoop/hbase/codec/BaseDecoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.BaseEncoder.java">org/apache/hadoop/hbase/codec/BaseEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.CellCodec.java">org/apache/hadoop/hbase/codec/CellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.CellCodecWithTags.java">org/apache/hadoop/hbase/codec/CellCodecWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.CodecPerformance.java">org/apache/hadoop/hbase/codec/CodecPerformance.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.MessageCodec.java">org/apache/hadoop/hbase/codec/MessageCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.TestCellMessageCodec.java">org/apache/hadoop/hbase/codec/TestCellMessageCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.BaseConstraint.java">org/apache/hadoop/hbase/constraint/BaseConstraint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.constraint.CheckConfigurationConstraint.java">org/apache/hadoop/hbase/constraint/CheckConfigurationConstraint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.Constraint.java">org/apache/hadoop/hbase/constraint/Constraint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.constraint.ConstraintException.java">org/apache/hadoop/hbase/constraint/ConstraintException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.package-info.java">org/apache/hadoop/hbase/constraint/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coordination.ZKSplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coordination.ZkSplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.BaseEnvironment.java">org/apache/hadoop/hbase/coprocessor/BaseEnvironment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.BulkLoadObserver.java">org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.ColumnInterpreter.java">org/apache/hadoop/hbase/coprocessor/ColumnInterpreter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.CoprocessorException.java">org/apache/hadoop/hbase/coprocessor/CoprocessorException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.CoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.CoreCoprocessor.java">org/apache/hadoop/hbase/coprocessor/CoreCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.HasRegionServerServices.java">org/apache/hadoop/hbase/coprocessor/HasRegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.MasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.MasterObserver.java">org/apache/hadoop/hbase/coprocessor/MasterObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.MetricsCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.ObserverContext.java">org/apache/hadoop/hbase/coprocessor/ObserverContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.ObserverContextImpl.java">org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionObserver.java">org/apache/hadoop/hbase/coprocessor/RegionObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionServerObserver.java">org/apache/hadoop/hbase/coprocessor/RegionServerObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver.java">org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestCoreMasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestCoreRegionCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestCoreRegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestMasterObserver.java">org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestOpenTableInCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestRegionObserverForAddingMutationsFromCoprocessors.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestRegionObserverInterface.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.TestRegionObserverScannerOpenHook.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.WALCoprocessor.java">org/apache/hadoop/hbase/coprocessor/WALCoprocessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.WALCoprocessorEnvironment.java">org/apache/hadoop/hbase/coprocessor/WALCoprocessorEnvironment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.WALObserver.java">org/apache/hadoop/hbase/coprocessor/WALObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.package-info.java">org/apache/hadoop/hbase/coprocessor/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.errorhandling.ForeignException.java">org/apache/hadoop/hbase/errorhandling/ForeignException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher.java">org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.errorhandling.TestForeignExceptionDispatcher.java">org/apache/hadoop/hbase/errorhandling/TestForeignExceptionDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.errorhandling.TimeoutExceptionInjector.java">org/apache/hadoop/hbase/errorhandling/TimeoutExceptionInjector.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil.java">org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.exceptions.FailedSanityCheckException.java">org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.exceptions.MergeRegionException.java">org/apache/hadoop/hbase/exceptions/MergeRegionException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.executor.EventHandler.java">org/apache/hadoop/hbase/executor/EventHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.executor.EventType.java">org/apache/hadoop/hbase/executor/EventType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.executor.ExecutorService.java">org/apache/hadoop/hbase/executor/ExecutorService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.executor.ExecutorType.java">org/apache/hadoop/hbase/executor/ExecutorType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper.java">org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.favored.FavoredNodesPromoter.java">org/apache/hadoop/hbase/favored/FavoredNodesPromoter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.favored.StartcodeAgnosticServerName.java">org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.BigDecimalComparator.java">org/apache/hadoop/hbase/filter/BigDecimalComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.BinaryComparator.java">org/apache/hadoop/hbase/filter/BinaryComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.BinaryPrefixComparator.java">org/apache/hadoop/hbase/filter/BinaryPrefixComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.BitComparator.java">org/apache/hadoop/hbase/filter/BitComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ByteArrayComparable.java">org/apache/hadoop/hbase/filter/ByteArrayComparable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnCountGetFilter.java">org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnPaginationFilter.java">org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ColumnRangeFilter.java">org/apache/hadoop/hbase/filter/ColumnRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.CompareFilter.java">org/apache/hadoop/hbase/filter/CompareFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.DependentColumnFilter.java">org/apache/hadoop/hbase/filter/DependentColumnFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FamilyFilter.java">org/apache/hadoop/hbase/filter/FamilyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.Filter.java">org/apache/hadoop/hbase/filter/Filter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterAllFilter.java">org/apache/hadoop/hbase/filter/FilterAllFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterBase.java">org/apache/hadoop/hbase/filter/FilterBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterList.java">org/apache/hadoop/hbase/filter/FilterList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterListBase.java">org/apache/hadoop/hbase/filter/FilterListBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterListWithAND.java">org/apache/hadoop/hbase/filter/FilterListWithAND.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterListWithOR.java">org/apache/hadoop/hbase/filter/FilterListWithOR.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>93</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterTestingCluster.java">org/apache/hadoop/hbase/filter/FilterTestingCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterWrapper.java">org/apache/hadoop/hbase/filter/FilterWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter.java">org/apache/hadoop/hbase/filter/FirstKeyOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FirstKeyValueMatchingQualifiersFilter.java">org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.FuzzyRowFilter.java">org/apache/hadoop/hbase/filter/FuzzyRowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.InclusiveStopFilter.java">org/apache/hadoop/hbase/filter/InclusiveStopFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.KeyOnlyFilter.java">org/apache/hadoop/hbase/filter/KeyOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.LongComparator.java">org/apache/hadoop/hbase/filter/LongComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.MultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.NullComparator.java">org/apache/hadoop/hbase/filter/NullComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.PageFilter.java">org/apache/hadoop/hbase/filter/PageFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.ParseConstants.java">org/apache/hadoop/hbase/filter/ParseConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ParseFilter.java">org/apache/hadoop/hbase/filter/ParseFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.PrefixFilter.java">org/apache/hadoop/hbase/filter/PrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.QualifierFilter.java">org/apache/hadoop/hbase/filter/QualifierFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.RandomRowFilter.java">org/apache/hadoop/hbase/filter/RandomRowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.RegexStringComparator.java">org/apache/hadoop/hbase/filter/RegexStringComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.RowFilter.java">org/apache/hadoop/hbase/filter/RowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/SingleColumnValueExcludeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.SingleColumnValueFilter.java">org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.SkipFilter.java">org/apache/hadoop/hbase/filter/SkipFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.SubstringComparator.java">org/apache/hadoop/hbase/filter/SubstringComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestColumnPaginationFilter.java">org/apache/hadoop/hbase/filter/TestColumnPaginationFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestDependentColumnFilter.java">org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFilter.java">org/apache/hadoop/hbase/filter/TestFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>269</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFilterList.java">org/apache/hadoop/hbase/filter/TestFilterList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFilterListOrOperatorWithBlkCnt.java">org/apache/hadoop/hbase/filter/TestFilterListOrOperatorWithBlkCnt.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFilterWithScanLimits.java">org/apache/hadoop/hbase/filter/TestFilterWithScanLimits.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFilterWrapper.java">org/apache/hadoop/hbase/filter/TestFilterWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFirstKeyValueMatchingQualifiersFilter.java">org/apache/hadoop/hbase/filter/TestFirstKeyValueMatchingQualifiersFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFuzzyRowAndColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestFuzzyRowFilterEndToEnd.java">org/apache/hadoop/hbase/filter/TestFuzzyRowFilterEndToEnd.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestInclusiveStopFilter.java">org/apache/hadoop/hbase/filter/TestInclusiveStopFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestMultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestNullComparator.java">org/apache/hadoop/hbase/filter/TestNullComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestPageFilter.java">org/apache/hadoop/hbase/filter/TestPageFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestPrefixFilter.java">org/apache/hadoop/hbase/filter/TestPrefixFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestRandomRowFilter.java">org/apache/hadoop/hbase/filter/TestRandomRowFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestRegexComparator.java">org/apache/hadoop/hbase/filter/TestRegexComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestScanRowPrefix.java">org/apache/hadoop/hbase/filter/TestScanRowPrefix.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TestSingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueExcludeFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.TestSingleColumnValueFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.TimestampsFilter.java">org/apache/hadoop/hbase/filter/TimestampsFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.ValueFilter.java">org/apache/hadoop/hbase/filter/ValueFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.WhileMatchFilter.java">org/apache/hadoop/hbase/filter/WhileMatchFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.fs.HFileSystem.java">org/apache/hadoop/hbase/fs/HFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.fs.TestBlockReorderBlockLocation.java">org/apache/hadoop/hbase/fs/TestBlockReorderBlockLocation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.fs.TestBlockReorderMultiBlocks.java">org/apache/hadoop/hbase/fs/TestBlockReorderMultiBlocks.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.HttpServer.java">org/apache/hadoop/hbase/http/HttpServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.HttpServerFunctionalTest.java">org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.ProxyUserAuthenticationFilter.java">org/apache/hadoop/hbase/http/ProxyUserAuthenticationFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.http.TestHttpCookieFlag.java">org/apache/hadoop/hbase/http/TestHttpCookieFlag.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.http.TestProxyUserSpnegoHttpServer.java">org/apache/hadoop/hbase/http/TestProxyUserSpnegoHttpServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.ByteBuffInputStream.java">org/apache/hadoop/hbase/io/ByteBuffInputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.ByteBufferOutputStream.java">org/apache/hadoop/hbase/io/ByteBufferOutputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.CellOutputStream.java">org/apache/hadoop/hbase/io/CellOutputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.FSDataInputStreamWrapper.java">org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.FileLink.java">org/apache/hadoop/hbase/io/FileLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.HalfStoreFileReader.java">org/apache/hadoop/hbase/io/HalfStoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.HeapSize.java">org/apache/hadoop/hbase/io/HeapSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.ImmutableBytesWritable.java">org/apache/hadoop/hbase/io/ImmutableBytesWritable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.Reference.java">org/apache/hadoop/hbase/io/Reference.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TagCompressionContext.java">org/apache/hadoop/hbase/io/TagCompressionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.TestByteBufferOutputStream.java">org/apache/hadoop/hbase/io/TestByteBufferOutputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TestFileLink.java">org/apache/hadoop/hbase/io/TestFileLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.TestHFileLink.java">org/apache/hadoop/hbase/io/TestHFileLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TestHalfStoreFileReader.java">org/apache/hadoop/hbase/io/TestHalfStoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.TestHeapSize.java">org/apache/hadoop/hbase/io/TestHeapSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TestImmutableBytesWritable.java">org/apache/hadoop/hbase/io/TestImmutableBytesWritable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.TestMetricsIO.java">org/apache/hadoop/hbase/io/TestMetricsIO.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.TimeRange.java">org/apache/hadoop/hbase/io/TimeRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.WALLink.java">org/apache/hadoop/hbase/io/WALLink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutput.java">org/apache/hadoop/hbase/io/asyncfs/AsyncFSOutput.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper.java">org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper.java">org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputSaslHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.ProtobufDecoder.java">org/apache/hadoop/hbase/io/asyncfs/ProtobufDecoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.asyncfs.TestSaslFanOutOneBlockAsyncDFSOutput.java">org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.compress.Compression.java">org/apache/hadoop/hbase/io/compress/Compression.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Cipher.java">org/apache/hadoop/hbase/io/crypto/Cipher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Decryptor.java">org/apache/hadoop/hbase/io/crypto/Decryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Encryption.java">org/apache/hadoop/hbase/io/crypto/Encryption.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.Encryptor.java">org/apache/hadoop/hbase/io/crypto/Encryptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.KeyProvider.java">org/apache/hadoop/hbase/io/crypto/KeyProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.crypto.aes.CryptoAES.java">org/apache/hadoop/hbase/io/crypto/aes/CryptoAES.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder.java">org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.java">org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder.java">org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.EncodedDataBlock.java">org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder.java">org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder.java">org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.TestDataBlockEncoders.java">org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.encoding.TestEncodedSeekers.java">org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hadoopbackport.ThrottledInputStream.java">org/apache/hadoop/hbase/io/hadoopbackport/ThrottledInputStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCache.java">org/apache/hadoop/hbase/io/hfile/BlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCacheKey.java">org/apache/hadoop/hbase/io/hfile/BlockCacheKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.java">org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockCachesIterator.java">org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.BlockType.java">org/apache/hadoop/hbase/io/hfile/BlockType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheConfig.java">org/apache/hadoop/hbase/io/hfile/CacheConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheTestUtils.java">org/apache/hadoop/hbase/io/hfile/CacheTestUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheableDeserializer.java">org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CacheableDeserializerIdManager.java">org/apache/hadoop/hbase/io/hfile/CacheableDeserializerIdManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.ChecksumUtil.java">org/apache/hadoop/hbase/io/hfile/ChecksumUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.java">org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilter.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilterBase.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CompoundBloomFilterWriter.java">org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.CorruptHFileException.java">org/apache/hadoop/hbase/io/hfile/CorruptHFileException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileBlockIndex.java">org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>37</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder.java">org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileInfo.java">org/apache/hadoop/hbase/io/hfile/HFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFilePrettyPrinter.java">org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileScanner.java">org/apache/hadoop/hbase/io/hfile/HFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileUtil.java">org/apache/hadoop/hbase/io/hfile/HFileUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.KVGenerator.java">org/apache/hadoop/hbase/io/hfile/KVGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruAdaptiveBlockCache.java">org/apache/hadoop/hbase/io/hfile/LruAdaptiveBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruCachedBlock.java">org/apache/hadoop/hbase/io/hfile/LruCachedBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.LruCachedBlockQueue.java">org/apache/hadoop/hbase/io/hfile/LruCachedBlockQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.NanoTimer.java">org/apache/hadoop/hbase/io/hfile/NanoTimer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.NoOpDataBlockEncoder.java">org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.PrefetchExecutor.java">org/apache/hadoop/hbase/io/hfile/PrefetchExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.RandomKeyValueUtil.java">org/apache/hadoop/hbase/io/hfile/RandomKeyValueUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestCacheConfig.java">org/apache/hadoop/hbase/io/hfile/TestCacheConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestCacheOnWrite.java">org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestCachedBlockQueue.java">org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestChecksum.java">org/apache/hadoop/hbase/io/hfile/TestChecksum.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestFixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestForceCacheImportantBlocks.java">org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestHFile.java">org/apache/hadoop/hbase/io/hfile/TestHFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestHFileBlock.java">org/apache/hadoop/hbase/io/hfile/TestHFileBlock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestHFileBlockIndex.java">org/apache/hadoop/hbase/io/hfile/TestHFileBlockIndex.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestHFileDataBlockEncoder.java">org/apache/hadoop/hbase/io/hfile/TestHFileDataBlockEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestHFileWriterV3.java">org/apache/hadoop/hbase/io/hfile/TestHFileWriterV3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestLruAdaptiveBlockCache.java">org/apache/hadoop/hbase/io/hfile/TestLruAdaptiveBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestLruBlockCache.java">org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestPrefetch.java">org/apache/hadoop/hbase/io/hfile/TestPrefetch.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TestScannerSelectionUsingKeyRange.java">org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingKeyRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.TinyLfuBlockCache.java">org/apache/hadoop/hbase/io/hfile/TinyLfuBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketCacheStats.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCacheStats.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketProtoUtils.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketProtoUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.ByteBufferIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.CachedEntryQueue.java">org/apache/hadoop/hbase/io/hfile/bucket/CachedEntryQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.FileIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.FileMmapIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileMmapIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.IOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.TestBucketCache.java">org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.TestBucketWriterThread.java">org/apache/hadoop/hbase/io/hfile/bucket/TestBucketWriterThread.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.TestFileIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.util.Dictionary.java">org/apache/hadoop/hbase/io/util/Dictionary.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.util.LRUDictionary.java">org/apache/hadoop/hbase/io/util/LRUDictionary.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.util.MemorySizeUtil.java">org/apache/hadoop/hbase/io/util/MemorySizeUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.util.StreamUtils.java">org/apache/hadoop/hbase/io/util/StreamUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.AbstractRpcClient.java">org/apache/hadoop/hbase/ipc/AbstractRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.AdaptiveLifoCoDelCallQueue.java">org/apache/hadoop/hbase/ipc/AdaptiveLifoCoDelCallQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.BlockingRpcCallback.java">org/apache/hadoop/hbase/ipc/BlockingRpcCallback.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.BlockingRpcConnection.java">org/apache/hadoop/hbase/ipc/BlockingRpcConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.BufferCallBeforeInitHandler.java">org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.BufferChain.java">org/apache/hadoop/hbase/ipc/BufferChain.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.CallQueueInfo.java">org/apache/hadoop/hbase/ipc/CallQueueInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.CellBlockBuilder.java">org/apache/hadoop/hbase/ipc/CellBlockBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.java">org/apache/hadoop/hbase/ipc/CoprocessorRpcUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.DelegatingHBaseRpcController.java">org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.FailedServers.java">org/apache/hadoop/hbase/ipc/FailedServers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.FifoRpcScheduler.java">org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.HBaseRpcController.java">org/apache/hadoop/hbase/ipc/HBaseRpcController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.HBaseRpcControllerImpl.java">org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.IPCUtil.java">org/apache/hadoop/hbase/ipc/IPCUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.IntegrationTestRpcClient.java">org/apache/hadoop/hbase/ipc/IntegrationTestRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.MasterFifoRpcScheduler.java">org/apache/hadoop/hbase/ipc/MasterFifoRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.MetricsHBaseServer.java">org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.NettyRpcServerPreambleHandler.java">org/apache/hadoop/hbase/ipc/NettyRpcServerPreambleHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.NettyRpcServerRequestDecoder.java">org/apache/hadoop/hbase/ipc/NettyRpcServerRequestDecoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.NettyRpcServerResponseEncoder.java">org/apache/hadoop/hbase/ipc/NettyRpcServerResponseEncoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.NettyServerRpcConnection.java">org/apache/hadoop/hbase/ipc/NettyServerRpcConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.PriorityFunction.java">org/apache/hadoop/hbase/ipc/PriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcCall.java">org/apache/hadoop/hbase/ipc/RpcCall.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcCallContext.java">org/apache/hadoop/hbase/ipc/RpcCallContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcClientFactory.java">org/apache/hadoop/hbase/ipc/RpcClientFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcExecutor.java">org/apache/hadoop/hbase/ipc/RpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcScheduler.java">org/apache/hadoop/hbase/ipc/RpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcSchedulerContext.java">org/apache/hadoop/hbase/ipc/RpcSchedulerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServer.java">org/apache/hadoop/hbase/ipc/RpcServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServerFactory.java">org/apache/hadoop/hbase/ipc/RpcServerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServerInterface.java">org/apache/hadoop/hbase/ipc/RpcServerInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.ServerRpcConnection.java">org/apache/hadoop/hbase/ipc/ServerRpcConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.java">org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleRpcServer.java">org/apache/hadoop/hbase/ipc/SimpleRpcServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleRpcServerResponder.java">org/apache/hadoop/hbase/ipc/SimpleRpcServerResponder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleServerRpcConnection.java">org/apache/hadoop/hbase/ipc/SimpleServerRpcConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.TestBufferChain.java">org/apache/hadoop/hbase/ipc/TestBufferChain.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.TestFifoRpcScheduler.java">org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.TestIPCUtil.java">org/apache/hadoop/hbase/ipc/TestIPCUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.TestRpcMetrics.java">org/apache/hadoop/hbase/ipc/TestRpcMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.log.HBaseMarkers.java">org/apache/hadoop/hbase/log/HBaseMarkers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.Driver.java">org/apache/hadoop/hbase/mapred/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.GroupingTableMap.java">org/apache/hadoop/hbase/mapred/GroupingTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.HRegionPartitioner.java">org/apache/hadoop/hbase/mapred/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableMap.java">org/apache/hadoop/hbase/mapred/IdentityTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableReduce.java">org/apache/hadoop/hbase/mapred/IdentityTableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.RowCounter.java">org/apache/hadoop/hbase/mapred/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormat.java">org/apache/hadoop/hbase/mapred/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormatBase.java">org/apache/hadoop/hbase/mapred/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMap.java">org/apache/hadoop/hbase/mapred/TableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapred/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableOutputFormat.java">org/apache/hadoop/hbase/mapred/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableRecordReader.java">org/apache/hadoop/hbase/mapred/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableReduce.java">org/apache/hadoop/hbase/mapred/TableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSplit.java">org/apache/hadoop/hbase/mapred/TableSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestGroupingTableMap.java">org/apache/hadoop/hbase/mapred/TestGroupingTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestIdentityTableMap.java">org/apache/hadoop/hbase/mapred/TestIdentityTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestRowCounter.java">org/apache/hadoop/hbase/mapred/TestRowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestTableInputFormat.java">org/apache/hadoop/hbase/mapred/TestTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestTableMapReduce.java">org/apache/hadoop/hbase/mapred/TestTableMapReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TestTableMapReduceUtil.java">org/apache/hadoop/hbase/mapred/TestTableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCounter.java">org/apache/hadoop/hbase/mapreduce/CellCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCreator.java">org/apache/hadoop/hbase/mapreduce/CellCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellSerialization.java">org/apache/hadoop/hbase/mapreduce/CellSerialization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellSortReducer.java">org/apache/hadoop/hbase/mapreduce/CellSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CopyTable.java">org/apache/hadoop/hbase/mapreduce/CopyTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.DefaultVisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Driver.java">org/apache/hadoop/hbase/mapreduce/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Export.java">org/apache/hadoop/hbase/mapreduce/Export.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ExportUtils.java">org/apache/hadoop/hbase/mapreduce/ExportUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.GroupingTableMapper.java">org/apache/hadoop/hbase/mapreduce/GroupingTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HFileInputFormat.java">org/apache/hadoop/hbase/mapreduce/HFileInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.java">org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HRegionPartitioner.java">org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HashTable.java">org/apache/hadoop/hbase/mapreduce/HashTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableMapper.java">org/apache/hadoop/hbase/mapreduce/IdentityTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableReducer.java">org/apache/hadoop/hbase/mapreduce/IdentityTableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Import.java">org/apache/hadoop/hbase/mapreduce/Import.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ImportTsv.java">org/apache/hadoop/hbase/mapreduce/ImportTsv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IntegrationTestBulkLoad.java">org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IntegrationTestImportTsv.java">org/apache/hadoop/hbase/mapreduce/IntegrationTestImportTsv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IntegrationTestTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/IntegrationTestTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim.java">org/apache/hadoop/hbase/mapreduce/MapreduceTestingShim.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableHFileOutputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableHFileOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormatTestBase.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultithreadedTableMapper.java">org/apache/hadoop/hbase/mapreduce/MultithreadedTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MutationSerialization.java">org/apache/hadoop/hbase/mapreduce/MutationSerialization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutCombiner.java">org/apache/hadoop/hbase/mapreduce/PutCombiner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutSortReducer.java">org/apache/hadoop/hbase/mapreduce/PutSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ResultSerialization.java">org/apache/hadoop/hbase/mapreduce/ResultSerialization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.RoundRobinTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/RoundRobinTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.RowCounter.java">org/apache/hadoop/hbase/mapreduce/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SimpleTotalOrderPartitioner.java">org/apache/hadoop/hbase/mapreduce/SimpleTotalOrderPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SyncTable.java">org/apache/hadoop/hbase/mapreduce/SyncTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapper.java">org/apache/hadoop/hbase/mapreduce/TableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputCommitter.java">org/apache/hadoop/hbase/mapreduce/TableOutputCommitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReader.java">org/apache/hadoop/hbase/mapreduce/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.java">org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableReducer.java">org/apache/hadoop/hbase/mapreduce/TableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestGroupingTableMapper.java">org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestHBaseMRTestingUtility.java">org/apache/hadoop/hbase/mapreduce/TestHBaseMRTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.java">org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestHRegionPartitioner.java">org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestImportExport.java">org/apache/hadoop/hbase/mapreduce/TestImportExport.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestImportTSVWithOperationAttributes.java">org/apache/hadoop/hbase/mapreduce/TestImportTSVWithOperationAttributes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestImportTSVWithTTLs.java">org/apache/hadoop/hbase/mapreduce/TestImportTSVWithTTLs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestImportTSVWithVisibilityLabels.java">org/apache/hadoop/hbase/mapreduce/TestImportTSVWithVisibilityLabels.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestImportTsv.java">org/apache/hadoop/hbase/mapreduce/TestImportTsv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestMultiTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestMultiTableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestMultithreadedTableMapper.java">org/apache/hadoop/hbase/mapreduce/TestMultithreadedTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestRoundRobinTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TestRoundRobinTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestRowCounter.java">org/apache/hadoop/hbase/mapreduce/TestRowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TestTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestTableInputFormatScanBase.java">org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestTableMapReduce.java">org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestTableMapReduceBase.java">org/apache/hadoop/hbase/mapreduce/TestTableMapReduceBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TestTimeRangeMapRed.java">org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TextSortReducer.java">org/apache/hadoop/hbase/mapreduce/TextSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterTextMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterTextMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.VisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/VisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication.java">org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.AbstractTestDLS.java">org/apache/hadoop/hbase/master/AbstractTestDLS.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentVerificationReport.java">org/apache/hadoop/hbase/master/AssignmentVerificationReport.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterSchema.java">org/apache/hadoop/hbase/master/ClusterSchema.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterSchemaServiceImpl.java">org/apache/hadoop/hbase/master/ClusterSchemaServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterStatusPublisher.java">org/apache/hadoop/hbase/master/ClusterStatusPublisher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.DrainingServerTracker.java">org/apache/hadoop/hbase/master/DrainingServerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.HMaster.java">org/apache/hadoop/hbase/master/HMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.HbckChore.java">org/apache/hadoop/hbase/master/HbckChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterCoprocessorHost.java">org/apache/hadoop/hbase/master/MasterCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterFileSystem.java">org/apache/hadoop/hbase/master/MasterFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterServices.java">org/apache/hadoop/hbase/master/MasterServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterWalManager.java">org/apache/hadoop/hbase/master/MasterWalManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsAssignmentManager.java">org/apache/hadoop/hbase/master/MetricsAssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMaster.java">org/apache/hadoop/hbase/master/MetricsMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterWrapperImpl.java">org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MockRegionServer.java">org/apache/hadoop/hbase/master/MockRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RackManager.java">org/apache/hadoop/hbase/master/RackManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionServerTracker.java">org/apache/hadoop/hbase/master/RegionServerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionState.java">org/apache/hadoop/hbase/master/RegionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ServerManager.java">org/apache/hadoop/hbase/master/ServerManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta.java">org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotSentinel.java">org/apache/hadoop/hbase/master/SnapshotSentinel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.SplitLogManager.java">org/apache/hadoop/hbase/master/SplitLogManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.SplitOrMergeTracker.java">org/apache/hadoop/hbase/master/SplitOrMergeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestActiveMasterManager.java">org/apache/hadoop/hbase/master/TestActiveMasterManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestDeadServer.java">org/apache/hadoop/hbase/master/TestDeadServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterFailoverBalancerPersistence.java">org/apache/hadoop/hbase/master/TestMasterFailoverBalancerPersistence.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterMetricsWrapper.java">org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterOperationsForRegionReplicas.java">org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterTransitions.java">org/apache/hadoop/hbase/master/TestMasterTransitions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement2.java">org/apache/hadoop/hbase/master/TestRegionPlacement2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestSplitWALManager.java">org/apache/hadoop/hbase/master/TestSplitWALManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.AssignProcedure.java">org/apache/hadoop/hbase/master/assignment/AssignProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.AssignmentManagerUtil.java">org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCMultipleMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMultipleMergedRegionsProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStateStore.java">org/apache/hadoop/hbase/master/assignment/RegionStateStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure.java">org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestRegionSplitAndSeparateChildren.java">org/apache/hadoop/hbase/master/assignment/TestRegionSplitAndSeparateChildren.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestRegionStates.java">org/apache/hadoop/hbase/master/assignment/TestRegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestSplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerClusterState.java">org/apache/hadoop/hbase/master/balancer/BalancerClusterState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestBalancerRejection.java">org/apache/hadoop/hbase/master/balancer/TestBalancerRejection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestBalancerStatusTagInJMXMetrics.java">org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestSimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestSimpleLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestStochasticBalancerJmxMetrics.java">org/apache/hadoop/hbase/master/balancer/TestStochasticBalancerJmxMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.DirScanPool.java">org/apache/hadoop/hbase/master/cleaner/DirScanPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestSnapshotFromMaster.java">org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.http.MasterStatusServlet.java">org/apache/hadoop/hbase/master/http/MasterStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.http.TestMasterStatusServlet.java">org/apache/hadoop/hbase/master/http/TestMasterStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.janitor.TestCatalogJanitor.java">org/apache/hadoop/hbase/master/janitor/TestCatalogJanitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.janitor.TestMetaFixer.java">org/apache/hadoop/hbase/master/janitor/TestMetaFixer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.locking.LockManager.java">org/apache/hadoop/hbase/master/locking/LockManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.package-info.java">org/apache/hadoop/hbase/master/normalizer/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.InitMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureDescriber.java">org/apache/hadoop/hbase/master/procedure/ProcedureDescriber.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch.java">org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterObserverPostCalls.java">org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureEvents.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestSafemodeBringsDownMaster.java">org/apache/hadoop/hbase/master/procedure/TestSafemodeBringsDownMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestTableDescriptorModificationFromClient.java">org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestWALProcedureStoreOnHDFS.java">org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.region.MasterRegionFactory.java">org/apache/hadoop/hbase/master/region/MasterRegionFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure.java">org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService.java">org/apache/hadoop/hbase/master/slowlog/SlowLogMasterService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotFileCacheWithDifferentWorkingDir.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCacheWithDifferentWorkingDir.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobConstants.java">org/apache/hadoop/hbase/mob/MobConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileName.java">org/apache/hadoop/hbase/mob/MobFileName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobTestUtil.java">org/apache/hadoop/hbase/mob/MobTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.TestMobWithByteBuffAllocator.java">org/apache/hadoop/hbase/mob/TestMobWithByteBuffAllocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.MobRefReporter.java">org/apache/hadoop/hbase/mob/mapreduce/MobRefReporter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mttr.IntegrationTestMTTR.java">org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namequeues.LogHandlerUtils.java">org/apache/hadoop/hbase/namequeues/LogHandlerUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namequeues.NamedQueueRecorder.java">org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namequeues.RpcLogDetails.java">org/apache/hadoop/hbase/namequeues/RpcLogDetails.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namequeues.SlowLogPersistentService.java">org/apache/hadoop/hbase/namequeues/SlowLogPersistentService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namequeues.impl.BalancerDecisionQueueService.java">org/apache/hadoop/hbase/namequeues/impl/BalancerDecisionQueueService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namequeues.impl.BalancerRejectionQueueService.java">org/apache/hadoop/hbase/namequeues/impl/BalancerRejectionQueueService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namequeues.request.NamedQueueGetRequest.java">org/apache/hadoop/hbase/namequeues/request/NamedQueueGetRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namequeues.response.NamedQueueGetResponse.java">org/apache/hadoop/hbase/namequeues/response/NamedQueueGetResponse.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceAuditor.java">org/apache/hadoop/hbase/namespace/NamespaceAuditor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedure.java">org/apache/hadoop/hbase/procedure/TestZKProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedureControllers.java">org/apache/hadoop/hbase/procedure/TestZKProcedureControllers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.region.HFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/HFileProcedurePrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.region.TestHFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/TestHFileProcedurePrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement.java">org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettingsImpl.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.OperationQuota.java">org/apache/hadoop/hbase/quotas/OperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaState.java">org/apache/hadoop/hbase/quotas/QuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaHelperForTests.java">org/apache/hadoop/hbase/quotas/SpaceQuotaHelperForTests.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierForTest.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestFileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/TestFileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreWithMiniCluster.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestRateLimiter.java">org/apache/hadoop/hbase/quotas/TestRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestSnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTableQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTablesWithQuotas.java">org/apache/hadoop/hbase/quotas/TestTablesWithQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.BaseViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/BaseViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DefaultViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoInsertsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.TestBulkLoadCheckingViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractTestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/AbstractTestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CSLMImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseManager.java">org/apache/hadoop/hbase/regionserver/LeaseManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsUserAggregateFactory.java">org/apache/hadoop/hbase/regionserver/MetricsUserAggregateFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/regionserver/RegionAsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerAccounting.java">org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanOptions.java">org/apache/hadoop/hbase/regionserver/ScanOptions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/ShipperListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitWALCallable.java">org/apache/hadoop/hbase/regionserver/SplitWALCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy.java">org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileComparators.java">org/apache/hadoop/hbase/regionserver/StoreFileComparators.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileReader.java">org/apache/hadoop/hbase/regionserver/StoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileWriter.java">org/apache/hadoop/hbase/regionserver/StoreFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreEngine.java">org/apache/hadoop/hbase/regionserver/StripeStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBlocksScanned.java">org/apache/hadoop/hbase/regionserver/TestBlocksScanned.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellFlatSet.java">org/apache/hadoop/hbase/regionserver/TestCellFlatSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellSkipListSet.java">org/apache/hadoop/hbase/regionserver/TestCellSkipListSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestClearRegionBlockCache.java">org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestColumnSeeking.java">org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingToCellFlatMapMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingToCellFlatMapMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompaction.java">org/apache/hadoop/hbase/regionserver/TestCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactionState.java">org/apache/hadoop/hbase/regionserver/TestCompactionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDefaultMemStore.java">org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFailedAppendAndSync.java">org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHMobStore.java">org/apache/hadoop/hbase/regionserver/TestHMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegion.java">org/apache/hadoop/hbase/regionserver/TestHRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/TestHRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionReplayEvents.java">org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHStore.java">org/apache/hadoop/hbase/regionserver/TestHStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestJoinedScanners.java">org/apache/hadoop/hbase/regionserver/TestJoinedScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeyValueScanFixture.java">org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestLogRoller.java">org/apache/hadoop/hbase/regionserver/TestLogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMajorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMajorCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMasterAddressTracker.java">org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegion.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiColumnScanner.java">org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestNotCleanupCompactedFileWhenRegionWarmup.java">org/apache/hadoop/hbase/regionserver/TestNotCleanupCompactedFileWhenRegionWarmup.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRSKilledWhenInitializing.java">org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionMergeTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionOpen.java">org/apache/hadoop/hbase/regionserver/TestRegionOpen.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicaFailover.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicasWithRestartScenarios.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicasWithRestartScenarios.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerAbort.java">org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerHostname.java">org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster.java">org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerOnlineConfigChange.java">org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestResettingCounters.java">org/apache/hadoop/hbase/regionserver/TestResettingCounters.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestReversibleScanners.java">org/apache/hadoop/hbase/regionserver/TestReversibleScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRowTooBig.java">org/apache/hadoop/hbase/regionserver/TestRowTooBig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerRPCScanMetrics.java">org/apache/hadoop/hbase/regionserver/TestScannerRPCScanMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerRetriableFailure.java">org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSettingTimeoutOnBlockingPoint.java">org/apache/hadoop/hbase/regionserver/TestSettingTimeoutOnBlockingPoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitLogWorker.java">org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTags.java">org/apache/hadoop/hbase/regionserver/TestTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTimestampFilterSeekHint.java">org/apache/hadoop/hbase/regionserver/TestTimestampFilterSeekHint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALLockup.java">org/apache/hadoop/hbase/regionserver/TestWALLockup.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALMonotonicallyIncreasingSeqId.java">org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.SortedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/SortedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.SpikyFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SpikyFileListGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.TestCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenPriorityRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler.java">org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler.java">org/apache/hadoop/hbase/regionserver/handler/WALSplitterHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.http.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/http/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.CompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/CompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.DeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.DropDeletesCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/DropDeletesCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.IncludeAllCompactionQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/IncludeAllCompactionQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.MajorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MajorCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.MinorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MinorCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.NewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.NormalUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.RawScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/RawScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanWildcardColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.StripeCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestNewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestNewVersionBehaviorTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestUserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.java">org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.CompactionThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/CompactionThroughputControllerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.FlushThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/FlushThroughputControllerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/NoLimitThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareCompactionThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareCompactionThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareFlushThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareFlushThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.ThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestProtobufLog.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSHLog.java">org/apache/hadoop/hbase/regionserver/wal/FSHLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedSyncBeforeLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.InstrumentedLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/InstrumentedLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ReaderBase.java">org/apache/hadoop/hbase/regionserver/wal/ReaderBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SequenceIdAccounting.java">org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestFSHLog.java">org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestHBaseWalOnEC.java">org/apache/hadoop/hbase/regionserver/wal/TestHBaseWalOnEC.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRollingNoCluster.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestWALConfiguration.java">org/apache/hadoop/hbase/regionserver/wal/TestWALConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.java">org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALUtil.java">org/apache/hadoop/hbase/regionserver/wal/WALUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.BulkLoadCellFilter.java">org/apache/hadoop/hbase/replication/BulkLoadCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ClusterMarkingEntryFilter.java">org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationException.java">org/apache/hadoop/hbase/replication/ReplicationException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationPeerConfig.java">org/apache/hadoop/hbase/replication/ReplicationPeerConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.java">org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestMultiSlaveReplication.java">org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestPerTableCFReplication.java">org/apache/hadoop/hbase/replication/TestPerTableCFReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationDisableInactivePeer.java">org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationStatusSink.java">org/apache/hadoop/hbase/replication/TestReplicationStatusSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestVerifyReplicationAdjunct.java">org/apache/hadoop/hbase/replication/TestVerifyReplicationAdjunct.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.WALCellFilter.java">org/apache/hadoop/hbase/replication/WALCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.WALEntryFilter.java">org/apache/hadoop/hbase/replication/WALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.DumpReplicationQueues.java">org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSink.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestRefreshRecoveredReplication.java">org/apache/hadoop/hbase/replication/regionserver/TestRefreshRecoveredReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestWALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.WALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/WALEntrySinkFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.ExistsResource.java">org/apache/hadoop/hbase/rest/ExistsResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.MetricsREST.java">org/apache/hadoop/hbase/rest/MetricsREST.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.MultiRowResource.java">org/apache/hadoop/hbase/rest/MultiRowResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.NamespacesInstanceResource.java">org/apache/hadoop/hbase/rest/NamespacesInstanceResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.NamespacesResource.java">org/apache/hadoop/hbase/rest/NamespacesResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ProtobufMessageHandler.java">org/apache/hadoop/hbase/rest/ProtobufMessageHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServer.java">org/apache/hadoop/hbase/rest/RESTServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServlet.java">org/apache/hadoop/hbase/rest/RESTServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServletContainer.java">org/apache/hadoop/hbase/rest/RESTServletContainer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RegionsResource.java">org/apache/hadoop/hbase/rest/RegionsResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RootResource.java">org/apache/hadoop/hbase/rest/RootResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RowResource.java">org/apache/hadoop/hbase/rest/RowResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RowSpec.java">org/apache/hadoop/hbase/rest/RowSpec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ScannerInstanceResource.java">org/apache/hadoop/hbase/rest/ScannerInstanceResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.ScannerResource.java">org/apache/hadoop/hbase/rest/ScannerResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ScannerResultGenerator.java">org/apache/hadoop/hbase/rest/ScannerResultGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.StorageClusterStatusResource.java">org/apache/hadoop/hbase/rest/StorageClusterStatusResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.StorageClusterVersionResource.java">org/apache/hadoop/hbase/rest/StorageClusterVersionResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.TableResource.java">org/apache/hadoop/hbase/rest/TableResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.TableScanResource.java">org/apache/hadoop/hbase/rest/TableScanResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.TestRESTServerSSL.java">org/apache/hadoop/hbase/rest/TestRESTServerSSL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.TestScannersWithLabels.java">org/apache/hadoop/hbase/rest/TestScannersWithLabels.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.TestSecureRESTServer.java">org/apache/hadoop/hbase/rest/TestSecureRESTServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.VersionResource.java">org/apache/hadoop/hbase/rest/VersionResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.client.RemoteAdmin.java">org/apache/hadoop/hbase/rest/client/RemoteAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.client.TestRemoteTable.java">org/apache/hadoop/hbase/rest/client/TestRemoteTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.CellModel.java">org/apache/hadoop/hbase/rest/model/CellModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.CellSetModel.java">org/apache/hadoop/hbase/rest/model/CellSetModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesInstanceModel.java">org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesModel.java">org/apache/hadoop/hbase/rest/model/NamespacesModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.ScannerModel.java">org/apache/hadoop/hbase/rest/model/ScannerModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.StorageClusterStatusModel.java">org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableInfoModel.java">org/apache/hadoop/hbase/rest/model/TableInfoModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableListModel.java">org/apache/hadoop/hbase/rest/model/TableListModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableModel.java">org/apache/hadoop/hbase/rest/model/TableModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableRegionModel.java">org/apache/hadoop/hbase/rest/model/TableRegionModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TestScannerModel.java">org/apache/hadoop/hbase/rest/model/TestScannerModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.VersionModel.java">org/apache/hadoop/hbase/rest/model/VersionModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.provider.JAXBContextResolver.java">org/apache/hadoop/hbase/rest/provider/JAXBContextResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.provider.consumer.ProtobufMessageBodyConsumer.java">org/apache/hadoop/hbase/rest/provider/consumer/ProtobufMessageBodyConsumer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.provider.producer.PlainTextMessageBodyProducer.java">org/apache/hadoop/hbase/rest/provider/producer/PlainTextMessageBodyProducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManager.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManagerImpl.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.TestRSGroupMajorCompactionTTL.java">org/apache/hadoop/hbase/rsgroup/TestRSGroupMajorCompactionTTL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.VerifyingRSGroupAdmin.java">org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.AbstractHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.AccessDeniedException.java">org/apache/hadoop/hbase/security/AccessDeniedException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.AuthMethod.java">org/apache/hadoop/hbase/security/AuthMethod.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.CryptoAESUnwrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESUnwrapHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.CryptoAESWrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESWrapHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.EncryptionUtil.java">org/apache/hadoop/hbase/security/EncryptionUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.HBasePolicyProvider.java">org/apache/hadoop/hbase/security/HBasePolicyProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.HBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.HadoopSecurityEnabledUserProviderForTesting.java">org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.NettyHBaseRpcConnectionHeaderHandler.java">org/apache/hadoop/hbase/security/NettyHBaseRpcConnectionHeaderHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClientHandler.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClientHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.SaslStatus.java">org/apache/hadoop/hbase/security/SaslStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.SaslUnwrapHandler.java">org/apache/hadoop/hbase/security/SaslUnwrapHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.SaslUtil.java">org/apache/hadoop/hbase/security/SaslUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.SecurityConstants.java">org/apache/hadoop/hbase/security/SecurityConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.SecurityUtil.java">org/apache/hadoop/hbase/security/SecurityUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.Superusers.java">org/apache/hadoop/hbase/security/Superusers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.TestSecureIPC.java">org/apache/hadoop/hbase/security/TestSecureIPC.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.TestUser.java">org/apache/hadoop/hbase/security/TestUser.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.User.java">org/apache/hadoop/hbase/security/User.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlClient.java">org/apache/hadoop/hbase/security/access/AccessControlClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlFilter.java">org/apache/hadoop/hbase/security/access/AccessControlFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlUtil.java">org/apache/hadoop/hbase/security/access/AccessControlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessController.java">org/apache/hadoop/hbase/security/access/AccessController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.AuthResult.java">org/apache/hadoop/hbase/security/access/AuthResult.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.Permission.java">org/apache/hadoop/hbase/security/access/Permission.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.SecureTestUtil.java">org/apache/hadoop/hbase/security/access/SecureTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil.java">org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TablePermission.java">org/apache/hadoop/hbase/security/access/TablePermission.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessControlFilter.java">org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController.java">org/apache/hadoop/hbase/security/access/TestAccessController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController2.java">org/apache/hadoop/hbase/security/access/TestAccessController2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLs.java">org/apache/hadoop/hbase/security/access/TestCellACLs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestHDFSAclHelper.java">org/apache/hadoop/hbase/security/access/TestHDFSAclHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestTablePermissions.java">org/apache/hadoop/hbase/security/access/TestTablePermissions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.java">org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.provider.example.TestShadeSaslAuthenticationProvider.java">org/apache/hadoop/hbase/security/provider/example/TestShadeSaslAuthenticationProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationKey.java">org/apache/hadoop/hbase/security/token/AuthenticationKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationTokenSecretManager.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationTokenSelector.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.token.SecureTestCluster.java">org/apache/hadoop/hbase/security/token/SecureTestCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.token.TestTokenAuthentication.java">org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.token.TestZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/TestZKSecretWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.token.TokenProvider.java">org/apache/hadoop/hbase/security/token/TokenProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.token.ZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.CellVisibility.java">org/apache/hadoop/hbase/security/visibility/CellVisibility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.DefaultVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.DefinedSetFilterScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/DefinedSetFilterScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.EnforcingScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/EnforcingScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.ExpAsStringVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.ExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/ExpressionExpander.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.ExpressionParser.java">org/apache/hadoop/hbase/security/visibility/ExpressionParser.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.FeedUserAuthScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/FeedUserAuthScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.LabelFilteringScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/LabelFilteringScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.LoadTestDataGeneratorWithVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.ScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/ScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.SimpleScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/SimpleScanLabelGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/TestExpressionExpander.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestExpressionParser.java">org/apache/hadoop/hbase/security/visibility/TestExpressionParser.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsOpWithDifferentUsersNoACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsOpWithDifferentUsersNoACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsReplication.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithCustomVisLabService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLablesWithGroups.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLablesWithGroups.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityClient.java">org/apache/hadoop/hbase/security/visibility/VisibilityClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityConstants.java">org/apache/hadoop/hbase/security/visibility/VisibilityConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityController.java">org/apache/hadoop/hbase/security/visibility/VisibilityController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityExpEvaluator.java">org/apache/hadoop/hbase/security/visibility/VisibilityExpEvaluator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelFilter.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelService.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelServiceManager.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelServiceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelsValidator.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsValidator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityNewVersionBehaivorTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityNewVersionBehaivorTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityReplicationEndpoint.java">org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityScanDeleteTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityTestUtil.java">org/apache/hadoop/hbase/security/visibility/VisibilityTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityUtils.java">org/apache/hadoop/hbase/security/visibility/VisibilityUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.visibility.ZKVisibilityLabelWatcher.java">org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>176</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.shaded.protobuf.RequestConverter.java">org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>63</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter.java">org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.slowlog.SlowLogTableAccessor.java">org/apache/hadoop/hbase/slowlog/SlowLogTableAccessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.CreateSnapshot.java">org/apache/hadoop/hbase/snapshot/CreateSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.snapshot.ExportSnapshot.java">org/apache/hadoop/hbase/snapshot/ExportSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.MobSnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotInfo.java">org/apache/hadoop/hbase/snapshot/SnapshotInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifest.java">org/apache/hadoop/hbase/snapshot/SnapshotManifest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifestV2.java">org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.snapshot.TestExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestExportSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.TestRestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestBigLinkedListWithVisibility.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedListWithVisibility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>71</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestReplication.java">org/apache/hadoop/hbase/test/IntegrationTestReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.test.IntegrationTestWithCellVisibilityLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.thrift.IncrementCoalescer.java">org/apache/hadoop/hbase/thrift/IncrementCoalescer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.thrift.TestBindExceptionHandling.java">org/apache/hadoop/hbase/thrift/TestBindExceptionHandling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.thrift.TestThriftHttpServer.java">org/apache/hadoop/hbase/thrift/TestThriftHttpServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.thrift.ThriftHBaseServiceHandler.java">org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.thrift.ThriftHttpServlet.java">org/apache/hadoop/hbase/thrift/ThriftHttpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.thrift.ThriftServerRunner.java">org/apache/hadoop/hbase/thrift/ThriftServerRunner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.thrift2.ThriftHBaseServiceHandler.java">org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.thrift2.client.ThriftAdmin.java">org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.tool.BulkLoadHFilesTool.java">org/apache/hadoop/hbase/tool/BulkLoadHFilesTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.tool.HFileContentValidator.java">org/apache/hadoop/hbase/tool/HFileContentValidator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.tool.MapreduceTestingShim.java">org/apache/hadoop/hbase/tool/MapreduceTestingShim.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.tool.TestBulkLoadHFilesSplitRecovery.java">org/apache/hadoop/hbase/tool/TestBulkLoadHFilesSplitRecovery.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractFileStatusFilter.java">org/apache/hadoop/hbase/util/AbstractFileStatusFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.AbstractHBaseTool.java">org/apache/hadoop/hbase/util/AbstractHBaseTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Addressing.java">org/apache/hadoop/hbase/util/Addressing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.AvlUtil.java">org/apache/hadoop/hbase/util/AvlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.java">org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomContext.java">org/apache/hadoop/hbase/util/BloomContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilter.java">org/apache/hadoop/hbase/util/BloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterChunk.java">org/apache/hadoop/hbase/util/BloomFilterChunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterFactory.java">org/apache/hadoop/hbase/util/BloomFilterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterUtil.java">org/apache/hadoop/hbase/util/BloomFilterUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.BloomFilterWriter.java">org/apache/hadoop/hbase/util/BloomFilterWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BoundedPriorityBlockingQueue.java">org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Bytes.java">org/apache/hadoop/hbase/util/Bytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ChecksumType.java">org/apache/hadoop/hbase/util/ChecksumType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ClassSize.java">org/apache/hadoop/hbase/util/ClassSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Classes.java">org/apache/hadoop/hbase/util/Classes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CollectionBackedScanner.java">org/apache/hadoop/hbase/util/CollectionBackedScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CommonFSUtils.java">org/apache/hadoop/hbase/util/CommonFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConcurrentMapUtils.java">org/apache/hadoop/hbase/util/ConcurrentMapUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConfigurationUtil.java">org/apache/hadoop/hbase/util/ConfigurationUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConnectionCache.java">org/apache/hadoop/hbase/util/ConnectionCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConstantDelayQueue.java">org/apache/hadoop/hbase/util/ConstantDelayQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CoprocessorClassLoader.java">org/apache/hadoop/hbase/util/CoprocessorClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.DNS.java">org/apache/hadoop/hbase/util/DNS.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.DirectMemoryUtils.java">org/apache/hadoop/hbase/util/DirectMemoryUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.EncryptionTest.java">org/apache/hadoop/hbase/util/EncryptionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManager.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSTableDescriptors.java">org/apache/hadoop/hbase/util/FSTableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FileStatusFilter.java">org/apache/hadoop/hbase/util/FileStatusFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.GetJavaProperty.java">org/apache/hadoop/hbase/util/GetJavaProperty.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseConfTool.java">org/apache/hadoop/hbase/util/HBaseConfTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsck.java">org/apache/hadoop/hbase/util/HBaseFsck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsckRepair.java">org/apache/hadoop/hbase/util/HBaseFsckRepair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseHomePath.java">org/apache/hadoop/hbase/util/HBaseHomePath.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HFileArchiveUtil.java">org/apache/hadoop/hbase/util/HFileArchiveUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HFileTestUtil.java">org/apache/hadoop/hbase/util/HFileTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Hash.java">org/apache/hadoop/hbase/util/Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HashKey.java">org/apache/hadoop/hbase/util/HashKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HashedBytes.java">org/apache/hadoop/hbase/util/HashedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JSONBean.java">org/apache/hadoop/hbase/util/JSONBean.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JVM.java">org/apache/hadoop/hbase/util/JVM.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JVMClusterUtil.java">org/apache/hadoop/hbase/util/JVMClusterUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JenkinsHash.java">org/apache/hadoop/hbase/util/JenkinsHash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JvmPauseMonitor.java">org/apache/hadoop/hbase/util/JvmPauseMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.KeyLocker.java">org/apache/hadoop/hbase/util/KeyLocker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.LeaseNotRecoveredException.java">org/apache/hadoop/hbase/util/LeaseNotRecoveredException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithMOB.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithMOB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithTags.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.LoadTestTool.java">org/apache/hadoop/hbase/util/LoadTestTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.LogMonitoring.java">org/apache/hadoop/hbase/util/LogMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MD5Hash.java">org/apache/hadoop/hbase/util/MD5Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ManualEnvironmentEdge.java">org/apache/hadoop/hbase/util/ManualEnvironmentEdge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MapreduceDependencyClasspathTool.java">org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ModifyRegionUtils.java">org/apache/hadoop/hbase/util/ModifyRegionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MoveWithAck.java">org/apache/hadoop/hbase/util/MoveWithAck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MoveWithoutAck.java">org/apache/hadoop/hbase/util/MoveWithoutAck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedAction.java">org/apache/hadoop/hbase/util/MultiThreadedAction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReader.java">org/apache/hadoop/hbase/util/MultiThreadedReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReaderWithACL.java">org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedUpdater.java">org/apache/hadoop/hbase/util/MultiThreadedUpdater.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MultiThreadedWriter.java">org/apache/hadoop/hbase/util/MultiThreadedWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MunkresAssignment.java">org/apache/hadoop/hbase/util/MunkresAssignment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MurmurHash3.java">org/apache/hadoop/hbase/util/MurmurHash3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig.java">org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.OrderedBytes.java">org/apache/hadoop/hbase/util/OrderedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Pair.java">org/apache/hadoop/hbase/util/Pair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PairOfSameType.java">org/apache/hadoop/hbase/util/PairOfSameType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PoolMap.java">org/apache/hadoop/hbase/util/PoolMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PoolMapTestBase.java">org/apache/hadoop/hbase/util/PoolMapTestBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PositionedByteRange.java">org/apache/hadoop/hbase/util/PositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PrettyPrinter.java">org/apache/hadoop/hbase/util/PrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ProcessBasedLocalHBaseCluster.java">org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ReflectionUtils.java">org/apache/hadoop/hbase/util/ReflectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RegionMover.java">org/apache/hadoop/hbase/util/RegionMover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitCalculator.java">org/apache/hadoop/hbase/util/RegionSplitCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitter.java">org/apache/hadoop/hbase/util/RegionSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RollingStatCalculator.java">org/apache/hadoop/hbase/util/RollingStatCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ServerCommandLine.java">org/apache/hadoop/hbase/util/ServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ServerRegionReplicaUtil.java">org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleByteRange.java">org/apache/hadoop/hbase/util/SimpleByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleMutableByteRange.java">org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.StealJobQueue.java">org/apache/hadoop/hbase/util/StealJobQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.StoppableImplementation.java">org/apache/hadoop/hbase/util/StoppableImplementation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestBloomFilterChunk.java">org/apache/hadoop/hbase/util/TestBloomFilterChunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestBytes.java">org/apache/hadoop/hbase/util/TestBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestCompressionTest.java">org/apache/hadoop/hbase/util/TestCompressionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestCoprocessorScanPolicy.java">org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestFSTableDescriptors.java">org/apache/hadoop/hbase/util/TestFSTableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestFSUtils.java">org/apache/hadoop/hbase/util/TestFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestGsonUtil.java">org/apache/hadoop/hbase/util/TestGsonUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestHBaseFsckMOB.java">org/apache/hadoop/hbase/util/TestHBaseFsckMOB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestIdLock.java">org/apache/hadoop/hbase/util/TestIdLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestIdReadWriteLockWithObjectPool.java">org/apache/hadoop/hbase/util/TestIdReadWriteLockWithObjectPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadEncoded.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadSequential.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestRegionMover2.java">org/apache/hadoop/hbase/util/TestRegionMover2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestRegionMover3.java">org/apache/hadoop/hbase/util/TestRegionMover3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestRegionMoverWithRSGroupEnable.java">org/apache/hadoop/hbase/util/TestRegionMoverWithRSGroupEnable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestRegionSplitter.java">org/apache/hadoop/hbase/util/TestRegionSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestRoundRobinPoolMap.java">org/apache/hadoop/hbase/util/TestRoundRobinPoolMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.TestSortedList.java">org/apache/hadoop/hbase/util/TestSortedList.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.TestThreadLocalPoolMap.java">org/apache/hadoop/hbase/util/TestThreadLocalPoolMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Threads.java">org/apache/hadoop/hbase/util/Threads.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Triple.java">org/apache/hadoop/hbase/util/Triple.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.UnsafeAccess.java">org/apache/hadoop/hbase/util/UnsafeAccess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.UnsafeAvailChecker.java">org/apache/hadoop/hbase/util/UnsafeAvailChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.VersionInfo.java">org/apache/hadoop/hbase/util/VersionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Writables.java">org/apache/hadoop/hbase/util/Writables.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ZKDataMigrator.java">org/apache/hadoop/hbase/util/ZKDataMigrator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.compaction.TestMajorCompactor.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker.java">org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.java">org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.ReplicationChecker.java">org/apache/hadoop/hbase/util/hbck/ReplicationChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGenerator.java">org/apache/hadoop/hbase/util/test/LoadTestDataGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGeneratorWithACL.java">org/apache/hadoop/hbase/util/test/LoadTestDataGeneratorWithACL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.BoundedGroupingStrategy.java">org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.DisabledWALProvider.java">org/apache/hadoop/hbase/wal/DisabledWALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.FileSystemProxy.java">org/apache/hadoop/hbase/wal/FileSystemProxy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.IOTestProvider.java">org/apache/hadoop/hbase/wal/IOTestProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.NettyAsyncFSWALConfigHelper.java">org/apache/hadoop/hbase/wal/NettyAsyncFSWALConfigHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.RecoveredEditsOutputSink.java">org/apache/hadoop/hbase/wal/RecoveredEditsOutputSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestBoundedRegionGroupingStrategy.java">org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestFSHLogProvider.java">org/apache/hadoop/hbase/wal/TestFSHLogProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALFactory.java">org/apache/hadoop/hbase/wal/TestWALFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALFiltering.java">org/apache/hadoop/hbase/wal/TestWALFiltering.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALMethods.java">org/apache/hadoop/hbase/wal/TestWALMethods.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALOpenAfterDNRollingStart.java">org/apache/hadoop/hbase/wal/TestWALOpenAfterDNRollingStart.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALRootDir.java">org/apache/hadoop/hbase/wal/TestWALRootDir.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.TestWALSplit.java">org/apache/hadoop/hbase/wal/TestWALSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALKeyImpl.java">org/apache/hadoop/hbase/wal/WALKeyImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALPerformanceEvaluation.java">org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.HQuorumPeer.java">org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ReadOnlyZKClient.java">org/apache/hadoop/hbase/zookeeper/ReadOnlyZKClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKConfig.java">org/apache/hadoop/hbase/zookeeper/ZKConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKMetadata.java">org/apache/hadoop/hbase/zookeeper/ZKMetadata.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKWatcher.java">org/apache/hadoop/hbase/zookeeper/ZKWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZNodePaths.java">org/apache/hadoop/hbase/zookeeper/ZNodePaths.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZooKeeperHelper.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.TestMutableRangeHistogram.java">org/apache/hadoop/metrics2/lib/TestMutableRangeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
@@ -7275,62 +7270,62 @@
 <div class="section">
 <h2><a name="Rules"></a>Rules</h2>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Category</th>
 <th>Rule</th>
 <th>Violations</th>
 <th>Severity</th></tr>
-<tr class="b">
+<tr class="a">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
-<td>5</td>
+<td>7</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>blocks</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#EmptyBlock">EmptyBlock</a></td>
 <td>29</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#LeftCurly">LeftCurly</a></td>
 <td>116</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
 <td>1076</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>coding</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EmptyStatement">EmptyStatement</a></td>
 <td>19</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EqualsHashCode">EqualsHashCode</a></td>
 <td>2</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#InnerAssignment">InnerAssignment</a></td>
 <td>60</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>design</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#FinalClass">FinalClass</a></td>
 <td>52</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#HideUtilityClassConstructor">HideUtilityClassConstructor</a></td>
 <td>82</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#InterfaceIsType">InterfaceIsType</a></td>
 <td>1</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#VisibilityModifier">VisibilityModifier</a>
 <ul>
@@ -7339,12 +7334,12 @@
 <li>allowPublicImmutableFields: <tt>&quot;true&quot;</tt></li></ul></td>
 <td>101</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>imports</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#AvoidStarImport">AvoidStarImport</a></td>
 <td>21</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#ImportOrder">ImportOrder</a>
 <ul>
@@ -7352,21 +7347,21 @@
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li>
 <li>groups: <tt>&quot;*,org.apache.hbase.thirdparty,org.apache.hadoop.hbase.shaded&quot;</tt></li>
 <li>option: <tt>&quot;top&quot;</tt></li></ul></td>
-<td>680</td>
+<td>679</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#RedundantImport">RedundantImport</a></td>
 <td>10</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#UnusedImports">UnusedImports</a>
 <ul>
 <li>processJavadoc: <tt>&quot;true&quot;</tt></li></ul></td>
 <td>78</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>indentation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_indentation.html#Indentation">Indentation</a>
 <ul>
@@ -7375,54 +7370,54 @@
 <li>caseIndent: <tt>&quot;2&quot;</tt></li>
 <li>basicOffset: <tt>&quot;2&quot;</tt></li>
 <li>lineWrappingIndentation: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>2494</td>
+<td>2493</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>javadoc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
 <td>524</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>2210</td>
+<td>2205</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>misc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#ArrayTypeStyle">ArrayTypeStyle</a></td>
 <td>113</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#UpperEll">UpperEll</a></td>
 <td>23</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>sizes</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#LineLength">LineLength</a>
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>836</td>
+<td>835</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
 <td>56</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>whitespace</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter">FileTabCharacter</a></td>
 <td>3</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#MethodParamPad">MethodParamPad</a></td>
 <td>124</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#ParenPad">ParenPad</a></td>
 <td>148</td>
@@ -7432,97 +7427,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.AcidGuaranteesTestTool.java">org/apache/hadoop/hbase/AcidGuaranteesTestTool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>166</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>218</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>219</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>285</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>286</td></tr>
+<td>285</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
+<td>286</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>misc</td>
+<td>ArrayTypeStyle</td>
+<td>Array brackets at illegal position.</td>
 <td>340</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ByteBufferKeyOnlyKeyValue.java">org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>59</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>60</td></tr>
+<td>59</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>60</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>61</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CatalogFamilyFormat.java">org/apache/hadoop/hbase/CatalogFamilyFormat.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -7531,13 +7526,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.Cell.java">org/apache/hadoop/hbase/Cell.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -7546,31 +7541,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellBuilderFactory.java">org/apache/hadoop/hbase/CellBuilderFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -7579,170 +7574,170 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>301</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>319</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>322</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>330</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>339</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>341</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>344</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>364</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>374</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>380</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>389</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>407</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>500</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>524</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>599</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>600</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>612</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>641</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>703</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>704</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>715</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>738</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>739</td></tr>
+<td>738</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>739</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
@@ -7750,13 +7745,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ChaosZKClient.java">org/apache/hadoop/hbase/ChaosZKClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -7765,76 +7760,76 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClientMetaTableAccessor.java">org/apache/hadoop/hbase/ClientMetaTableAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>167</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>192</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>223</td></tr>
+<td>192</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>223</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>236</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterId.java">org/apache/hadoop/hbase/ClusterId.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7843,13 +7838,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterManager.java">org/apache/hadoop/hbase/ClusterManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -7858,37 +7853,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 3, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>183</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>186</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 6, expected level should be 8.</td>
 <td>198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -7897,13 +7892,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CoprocClusterManager.java">org/apache/hadoop/hbase/CoprocClusterManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -7912,13 +7907,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.Coprocessor.java">org/apache/hadoop/hbase/Coprocessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -7927,25 +7922,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.DistributedHBaseCluster.java">org/apache/hadoop/hbase/DistributedHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>454</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -7954,13 +7949,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ExtendedCell.java">org/apache/hadoop/hbase/ExtendedCell.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7969,19 +7964,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseCluster.java">org/apache/hadoop/hbase/HBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>373</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7990,13 +7985,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseClusterManager.java">org/apache/hadoop/hbase/HBaseClusterManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -8005,43 +8000,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseConfiguration.java">org/apache/hadoop/hbase/HBaseConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.lang.reflect.InvocationTargetException.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.lang.reflect.Method.</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 7, expected level should be 6.</td>
 <td>182</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -8050,19 +8045,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseIOException.java">org/apache/hadoop/hbase/HBaseIOException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -8071,35 +8066,29 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseTestingUtility.java">org/apache/hadoop/hbase/HBaseTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>355</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>357</td></tr>
+<td>356</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>358</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 7, expected level should be 8.</td>
-<td>433</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
 <td>434</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -8117,146 +8106,146 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'method call rparen' has incorrect indentation level 7, expected level should be 8.</td>
+<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
 <td>437</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'method call rparen' has incorrect indentation level 7, expected level should be 8.</td>
+<td>438</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>449</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>510</td></tr>
+<td>450</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>514</td></tr>
+<td>511</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>522</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>526</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>534</td></tr>
+<td>515</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>544</td></tr>
+<td>523</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>527</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>535</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>559</td></tr>
+<td>545</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>560</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>563</td></tr>
-<tr class="a">
+<td>564</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>564</td></tr>
-<tr class="b">
+<td>565</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
-<td>565</td></tr>
-<tr class="a">
+<td>566</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>577</td></tr>
-<tr class="b">
+<td>578</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>581</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>582</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>598</td></tr>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>583</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>598</td></tr>
+<td>599</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>misc</td>
+<td>ArrayTypeStyle</td>
+<td>Array brackets at illegal position.</td>
+<td>599</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>750</td></tr>
-<tr class="a">
+<td>751</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>794</td></tr>
-<tr class="b">
+<td>795</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>1247</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1258</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>1332</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>1347</td></tr>
+<td>1248</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1359</td></tr>
+<td>1259</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>1333</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>1348</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8272,51 +8261,51 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>1363</td></tr>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>1362</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1378</td></tr>
+<td>1364</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1391</td></tr>
+<td>1379</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1413</td></tr>
+<td>1392</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1421</td></tr>
+<td>1414</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1429</td></tr>
+<td>1422</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1437</td></tr>
+<td>1430</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1445</td></tr>
+<td>1438</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8328,19 +8317,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1448</td></tr>
+<td>1447</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1451</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1457</td></tr>
+<td>1449</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>1452</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8352,19 +8341,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1460</td></tr>
+<td>1459</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1463</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1473</td></tr>
+<td>1461</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>1464</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8376,19 +8365,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1476</td></tr>
+<td>1475</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1479</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1485</td></tr>
+<td>1477</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>1480</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8406,19 +8395,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1489</td></tr>
+<td>1488</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>1493</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1503</td></tr>
+<td>1490</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>1494</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8430,19 +8419,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1506</td></tr>
+<td>1505</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1509</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1515</td></tr>
+<td>1507</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>1510</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8454,31 +8443,31 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1518</td></tr>
+<td>1517</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1526</td></tr>
+<td>1519</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1528</td></tr>
+<td>1527</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1530</td></tr>
+<td>1529</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1539</td></tr>
+<td>1531</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8496,37 +8485,37 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1543</td></tr>
+<td>1542</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>1544</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>1623</td></tr>
-<tr class="b">
+<td>1624</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1644</td></tr>
-<tr class="a">
+<td>1645</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 9, expected level should be 8.</td>
-<td>1651</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>1983</td></tr>
+<td>1652</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1991</td></tr>
+<td>1984</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8556,67 +8545,67 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1998</td></tr>
+<td>1996</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2040</td></tr>
+<td>1999</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2090</td></tr>
+<td>2041</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2101</td></tr>
+<td>2091</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2112</td></tr>
+<td>2102</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2124</td></tr>
+<td>2113</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2136</td></tr>
+<td>2125</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2220</td></tr>
+<td>2137</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>2221</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2223</td></tr>
-<tr class="a">
+<td>2224</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2324</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>2468</td></tr>
+<td>2325</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8634,19 +8623,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2472</td></tr>
+<td>2471</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2476</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2639</td></tr>
+<td>2473</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>2477</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8658,67 +8647,67 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2844</td></tr>
+<td>2641</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>2845</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>2882</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2913</td></tr>
+<td>2883</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2915</td></tr>
+<td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
+<td>2914</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
+<td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>2916</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
+<td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>2917</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'while' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>2928</td></tr>
+<td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
+<td>2918</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'while' child has incorrect indentation level 7, expected level should be 6.</td>
+<td>2929</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>3007</td></tr>
-<tr class="a">
+<td>3008</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3101</td></tr>
-<tr class="b">
+<td>3102</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3158</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>3179</td></tr>
+<td>3159</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8730,7 +8719,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3279</td></tr>
+<td>3181</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8739,22 +8728,22 @@
 <td>3280</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3283</td></tr>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>3281</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3288</td></tr>
+<td>3284</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>3296</td></tr>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>3289</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8766,7 +8755,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3313</td></tr>
+<td>3298</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8778,31 +8767,31 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3326</td></tr>
+<td>3315</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3347</td></tr>
+<td>3327</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3379</td></tr>
+<td>3348</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>3380</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3383</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>3435</td></tr>
+<td>3384</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8832,7 +8821,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3479</td></tr>
+<td>3440</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8844,37 +8833,37 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3505</td></tr>
+<td>3481</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3514</td></tr>
+<td>3506</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3527</td></tr>
+<td>3515</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>3528</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>3547</td></tr>
-<tr class="b">
+<td>3548</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>3577</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>3636</td></tr>
+<td>3578</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -8883,185 +8872,191 @@
 <td>3637</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>3638</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rparen' has incorrect indentation level 48, expected level should be 2.</td>
-<td>3657</td></tr>
-<tr class="b">
+<td>3658</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>3675</td></tr>
-<tr class="a">
+<td>3676</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>3894</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>3979</td></tr>
+<td>3895</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3981</td></tr>
+<td>3980</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4015</td></tr>
+<td>3982</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4056</td></tr>
+<td>4016</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4058</td></tr>
+<td>4057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>4136</td></tr>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>4059</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4144</td></tr>
+<td>4137</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4152</td></tr>
+<td>4145</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4153</td></tr></table></div>
+<td>4153</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>4154</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HFilePerformanceEvaluation.java">org/apache/hadoop/hbase/HFilePerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.ImmutableBytesWritable' import.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.hfile.CacheConfig' import.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>186</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>188</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>330</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>561</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>562</td></tr>
+<td>561</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>562</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>563</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HRegionLocation.java">org/apache/hadoop/hbase/HRegionLocation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -9070,19 +9065,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HTestConst.java">org/apache/hadoop/hbase/HTestConst.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.Collections' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -9091,13 +9086,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HadoopShims.java">org/apache/hadoop/hbase/HadoopShims.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -9106,97 +9101,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HealthChecker.java">org/apache/hadoop/hbase/HealthChecker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>112</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>114</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -9205,13 +9200,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestBackupRestore.java">org/apache/hadoop/hbase/IntegrationTestBackupRestore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -9220,319 +9215,319 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestDDLMasterFailover.java">org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 5 should be on the previous line.</td>
 <td>396</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>419</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>506</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>667</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 16, expected level should be one of the following: 10, 43, 44.</td>
 <td>705</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>705</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>720</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>780</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>854</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>855</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>856</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>857</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>858</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>859</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>860</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>861</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>862</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>863</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be 14.</td>
 <td>866</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be 16.</td>
 <td>867</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be 14.</td>
 <td>868</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>869</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>870</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>871</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>872</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>873</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>874</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>875</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>876</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>877</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>878</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>879</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be 14.</td>
 <td>881</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be 16.</td>
 <td>882</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be 14.</td>
 <td>883</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>884</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>885</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>886</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>887</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>888</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be 14.</td>
 <td>890</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be 16.</td>
 <td>891</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be 14.</td>
 <td>892</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>893</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>894</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>895</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>896</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>897</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>898</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>899</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>919</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -9541,67 +9536,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestIngest.java">org/apache/hadoop/hbase/IntegrationTestIngest.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>71</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>73</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 7, expected level should be 6.</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 9, expected level should be 8.</td>
 <td>146</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -9610,25 +9605,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestIngestWithACL.java">org/apache/hadoop/hbase/IntegrationTestIngestWithACL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -9637,13 +9632,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestIngestWithEncryption.java">org/apache/hadoop/hbase/IntegrationTestIngestWithEncryption.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -9652,64 +9647,64 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestIngestWithMOB.java">org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>61</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>62</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>63</td></tr>
+<td>62</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
+<td>63</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>64</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestIngestWithVisibilityLabels.java">org/apache/hadoop/hbase/IntegrationTestIngestWithVisibilityLabels.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 43.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 52.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -9718,19 +9713,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestManyRegions.java">org/apache/hadoop/hbase/IntegrationTestManyRegions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -9739,19 +9734,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestMetaReplicas.java">org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -9760,43 +9755,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestRegionReplicaPerf.java">org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>294</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
@@ -9805,37 +9800,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.IntegrationTestingUtility.java">org/apache/hadoop/hbase/IntegrationTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>71</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -9844,754 +9839,754 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.KeyValue.java">org/apache/hadoop/hbase/KeyValue.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>355</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>367</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>376</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>413</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>427</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>442</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>458</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>478</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>497</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>514</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>535</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>547</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>548</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>549</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>550</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>551</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>552</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>553</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>555</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>556</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>557</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>573</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>608</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>617</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>618</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>622</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
 <td>623</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>644</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>660</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>661</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>662</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>663</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>664</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>665</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>666</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>667</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>668</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>669</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>670</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>671</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>672</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>673</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>674</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>700</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>722</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>758</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>759</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>760</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>761</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>762</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>763</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>878</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1104</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1192</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1584</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1585</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1587</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1606</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1607</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1768</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1769</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1779</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1780</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1781</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1782</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1783</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1784</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1880</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1881</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1891</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1892</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1893</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1894</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1895</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1896</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>1922</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1939</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1940</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1941</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1942</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1943</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1944</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1945</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2086</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2087</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2182</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2262</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2264</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2265</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2273</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2274</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2276</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2277</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2282</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2294</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2295</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2297</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2313</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2314</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2315</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2317</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>2434</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2435</td></tr>
+<td>2434</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>2435</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>2436</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.KeyValueTestUtil.java">org/apache/hadoop/hbase/KeyValueTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -10600,164 +10595,164 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.KeyValueUtil.java">org/apache/hadoop/hbase/KeyValueUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>210</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>211</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>249</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>403</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>434</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>460</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>499</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>500</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>502</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>699</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>722</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>731</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>740</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>741</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>742</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>761</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>770</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>771</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>774</td></tr>
+<td>771</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>774</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
@@ -10765,164 +10760,164 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.LocalHBaseCluster.java">org/apache/hadoop/hbase/LocalHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>104</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>108</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>206</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>220</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>252</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>279</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>280</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>286</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>287</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>358</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>359</td></tr>
+<td>358</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>359</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
@@ -10930,46 +10925,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.MetaMockingUtil.java">org/apache/hadoop/hbase/MetaMockingUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>32</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>39</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>52</td></tr>
+<td>39</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>52</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>67</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.MetaMutationAnnotation.java">org/apache/hadoop/hbase/MetaMutationAnnotation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -10978,152 +10973,152 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.MiniHBaseCluster.java">org/apache/hadoop/hbase/MiniHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>233</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>411</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>490</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>491</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>492</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>533</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>618</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>619</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>620</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>635</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>648</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>654</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>745</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>758</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>780</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>795</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>828</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>838</td></tr>
+<td>828</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>838</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
@@ -11131,26 +11126,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.MultithreadedTestUtil.java">org/apache/hadoop/hbase/MultithreadedTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>71</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>85</td></tr>
+<td>71</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>85</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
@@ -11158,25 +11153,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.NamespaceDescriptor.java">org/apache/hadoop/hbase/NamespaceDescriptor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class NamespaceDescriptor should be declared as final.</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class Builder should be declared as final.</td>
 <td>162</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -11185,13 +11180,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.NotAllMetaRegionsOnlineException.java">org/apache/hadoop/hbase/NotAllMetaRegionsOnlineException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -11200,60 +11195,54 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluation.java">org/apache/hadoop/hbase/PerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>276</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 11, expected level should be one of the following: 10, 12.</td>
 <td>324</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>339</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>451</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>504</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call rparen' has incorrect indentation level 6, expected level should be 4.</td>
 <td>603</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>628</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>UpperEll</td>
-<td>Should use uppercase 'L'.</td>
-<td>748</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
@@ -11268,191 +11257,197 @@
 <td>748</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>misc</td>
+<td>UpperEll</td>
+<td>Should use uppercase 'L'.</td>
+<td>748</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1223</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1232</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1237</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1290</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>1296</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1299</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1392</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1394</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>1403</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>1445</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1561</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1567</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>1825</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>1873</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1984</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>2167</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>2332</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>2417</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>2459</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2575</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2576</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>2608</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>2663</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>2677</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
 <td>2681</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
 <td>2685</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 294 lines (max allowed is 150).</td>
 <td>2714</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2872</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -11461,13 +11456,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -11476,370 +11471,370 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.PrivateCellUtil.java">org/apache/hadoop/hbase/PrivateCellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>887</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>888</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>889</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>907</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>908</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>909</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1055</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1056</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1057</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1058</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1059</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1081</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1274</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1275</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2211</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2213</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2246</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2261</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2337</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2338</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2352</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2353</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2367</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2383</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2384</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2399</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2417</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2433</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2449</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2466</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2486</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2502</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2519</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2523</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2526</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2530</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>2531</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2536</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2549</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2562</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2575</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2588</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2666</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2811</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2825</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2834</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2839</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2847</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2913</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2914</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2915</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2916</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>2938</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2957</td></tr>
+<td>2938</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>2957</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>2976</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.QosTestHelper.java">org/apache/hadoop/hbase/QosTestHelper.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -11848,94 +11843,94 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.RegionLocations.java">org/apache/hadoop/hbase/RegionLocations.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>149</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>150</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>152</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>157</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>173</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>213</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>285</td></tr>
+<td>213</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>285</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>288</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.RegionStateListener.java">org/apache/hadoop/hbase/RegionStateListener.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -11944,73 +11939,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ScanPerformanceEvaluation.java">org/apache/hadoop/hbase/ScanPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 155).</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>254</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>256</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>324</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>326</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>329</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>380</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>382</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
@@ -12019,13 +12014,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.SplitLogCounters.java">org/apache/hadoop/hbase/SplitLogCounters.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -12034,31 +12029,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.SplitLogTask.java">org/apache/hadoop/hbase/SplitLogTask.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -12067,25 +12062,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.StripeCompactionsPerformanceEvaluation.java">org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -12094,13 +12089,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TableDescriptors.java">org/apache/hadoop/hbase/TableDescriptors.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -12109,124 +12104,124 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TableName.java">org/apache/hadoop/hbase/TableName.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>136</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>144</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>145</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>185</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>193</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>437</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>438</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>505</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>558</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>559</td></tr>
+<td>558</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
+<td>559</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
 <td>576</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TagBuilder.java">org/apache/hadoop/hbase/TagBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -12235,19 +12230,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TagBuilderFactory.java">org/apache/hadoop/hbase/TagBuilderFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.nio.ByteBuffer.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -12256,13 +12251,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TagType.java">org/apache/hadoop/hbase/TagType.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -12271,13 +12266,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -12286,13 +12281,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestFSTableDescriptorForceCreation.java">org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -12301,43 +12296,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestGlobalMemStoreSize.java">org/apache/hadoop/hbase/TestGlobalMemStoreSize.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>154</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>155</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>156</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>159</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -12346,19 +12341,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestIOFencing.java">org/apache/hadoop/hbase/TestIOFencing.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -12367,13 +12362,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestLocalHBaseCluster.java">org/apache/hadoop/hbase/TestLocalHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
@@ -12382,19 +12377,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>230</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -12403,13 +12398,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestMovedRegionCache.java">org/apache/hadoop/hbase/TestMovedRegionCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -12418,25 +12413,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 5, expected level should be one of the following: 4, 6.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -12445,13 +12440,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestNamespace.java">org/apache/hadoop/hbase/TestNamespace.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -12460,13 +12455,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -12475,146 +12470,146 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestPartialResultsFromClientSide.java">org/apache/hadoop/hbase/TestPartialResultsFromClientSide.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>176</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>247</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>320</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>374</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>394</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>402</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>405</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>455</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>557</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>648</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>649</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>650</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>659</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>677</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>678</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>679</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>683</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>689</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>690</td></tr>
+<td>689</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>690</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
@@ -12622,50 +12617,50 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestRegionRebalancing.java">org/apache/hadoop/hbase/TestRegionRebalancing.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization lcurly' has incorrect indentation level 12, expected level should be one of the following: 10, 25, 27.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>108</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>112</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>192</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>221</td></tr>
+<td>192</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>221</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 6.</td>
@@ -12673,13 +12668,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestSerialization.java">org/apache/hadoop/hbase/TestSerialization.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -12688,13 +12683,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TestTagBuilder.java">org/apache/hadoop/hbase/TestTagBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -12703,112 +12698,112 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.TimestampTestBase.java">org/apache/hadoop/hbase/TimestampTestBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Durability' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>39</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>127</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>178</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>203</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>209</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>231</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>236</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>250</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>262</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>267</td></tr>
+<td>262</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>267</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>273</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ZNodeClearer.java">org/apache/hadoop/hbase/ZNodeClearer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>104</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -12817,13 +12812,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.backup.FailedArchiveException.java">org/apache/hadoop/hbase/backup/FailedArchiveException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -12832,74 +12827,74 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.backup.HFileArchiver.java">org/apache/hadoop/hbase/backup/HFileArchiver.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class HFileArchiver should be declared as final.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>72</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 2, 4.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>353</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>666</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>672</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>689</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>691</td></tr>
+<td>689</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>691</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
@@ -12907,13 +12902,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.backup.regionserver.LogRollBackupSubprocedurePool.java">org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -12922,67 +12917,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosAgent.java">org/apache/hadoop/hbase/chaos/ChaosAgent.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.io.File.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.util.Map.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>478</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>555</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>557</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>558</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>559</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>560</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -12991,13 +12986,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosConstants.java">org/apache/hadoop/hbase/chaos/ChaosConstants.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -13006,25 +13001,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosService.java">org/apache/hadoop/hbase/chaos/ChaosService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13033,13 +13028,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosUtils.java">org/apache/hadoop/hbase/chaos/ChaosUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -13048,199 +13043,199 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.MasterKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MasterKillingMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>50</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>60</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>63</td></tr>
+<td>60</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
+<td>63</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>66</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.MobSlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>92</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>95</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>106</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>109</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
-<td>110</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
-<td>112</td></tr>
+<td>110</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
+<td>112</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>117</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.MonkeyConstants.java">org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>InterfaceIsType</td>
@@ -13249,13 +13244,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.MonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -13264,116 +13259,116 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.NoKillMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>50</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>51</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>63</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>65</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>71</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>74</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>79</td></tr>
+<td>74</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
+<td>79</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
@@ -13381,418 +13376,418 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.ServerKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/ServerKillingMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>51</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>52</td></tr>
+<td>51</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
+<td>52</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>63</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.SlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>95</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>100</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>109</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>110</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>112</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>125</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>145</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>148</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>154</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>160</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>163</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>166</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>169</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>175</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>178</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>181</td></tr>
+<td>178</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
+<td>181</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>184</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.factories.StressAssignmentManagerMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>68</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>71</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>80</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>81</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>82</td></tr>
+<td>81</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
+<td>82</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>91</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey.java">org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -13801,13 +13796,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.policies.PeriodicPolicy.java">org/apache/hadoop/hbase/chaos/policies/PeriodicPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13816,13 +13811,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.chaos.policies.TwoConcurrentActionPolicy.java">org/apache/hadoop/hbase/chaos/policies/TwoConcurrentActionPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -13831,13 +13826,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AbstractClientScanner.java">org/apache/hadoop/hbase/client/AbstractClientScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -13846,19 +13841,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AbstractResponse.java">org/apache/hadoop/hbase/client/AbstractResponse.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
@@ -13867,19 +13862,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Action.java">org/apache/hadoop/hbase/client/Action.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 28 should have line break after.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -13888,175 +13883,175 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Admin.java">org/apache/hadoop/hbase/client/Admin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>199</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>212</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>234</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>247</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>250</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>385</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>604</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>618</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>634</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>644</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>656</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>675</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>681</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>689</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>793</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>794</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1229</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>1317</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1349</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1546</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1550</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1668</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1670</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1681</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1683</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 125).</td>
 <td>1699</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1868</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14065,19 +14060,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Append.java">org/apache/hadoop/hbase/client/Append.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>131</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14086,61 +14081,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncAdmin.java">org/apache/hadoop/hbase/client/AsyncAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1179</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1186</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1305</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1343</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14149,25 +14144,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncBatchRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'loc' must be private and have accessor methods.</td>
 <td>123</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'actions' must be private and have accessor methods.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -14176,31 +14171,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncClientScanner.java">org/apache/hadoop/hbase/client/AsyncClientScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'loc' must be private and have accessor methods.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'stub' must be private and have accessor methods.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'controller' must be private and have accessor methods.</td>
 <td>125</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -14209,13 +14204,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncScanSingleRegionRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -14224,13 +14219,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncTableImpl.java">org/apache/hadoop/hbase/client/AsyncTableImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -14239,13 +14234,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.BatchScanResultCache.java">org/apache/hadoop/hbase/client/BatchScanResultCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14254,13 +14249,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.BufferingScanResultConsumer.java">org/apache/hadoop/hbase/client/BufferingScanResultConsumer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14269,19 +14264,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClientIdGenerator.java">org/apache/hadoop/hbase/client/ClientIdGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Addressing' import.</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -14290,13 +14285,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClientUtil.java">org/apache/hadoop/hbase/client/ClientUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -14305,13 +14300,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ClusterStatusListener.java">org/apache/hadoop/hbase/client/ClusterStatusListener.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14320,13 +14315,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ColumnCountOnRowFilter.java">org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14335,85 +14330,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ColumnFamilyDescriptor.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.compress.Compression' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 4, expected level should be 6.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>49</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 4, expected level should be 6.</td>
 <td>50</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 4, expected level should be 6.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 4, expected level should be 6.</td>
 <td>55</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>56</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 2, expected level should be 4.</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -14422,337 +14417,337 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class ColumnFamilyDescriptorBuilder should be declared as final.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>105</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 121).</td>
 <td>171</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>279</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>330</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>332</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>360</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>456</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>461</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>535</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>629</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>630</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>647</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>685</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>786</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>830</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>837</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>899</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>914</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>917</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>929</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>967</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>980</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1011</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1030</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1043</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>1056</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>1069</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>1082</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1087</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>1096</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>1207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1237</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1240</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>1243</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1274</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1291</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1306</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1321</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>1371</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1385</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -14761,19 +14756,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.CompactType.java">org/apache/hadoop/hbase/client/CompactType.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
@@ -14782,13 +14777,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.CompleteScanResultCache.java">org/apache/hadoop/hbase/client/CompleteScanResultCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14797,13 +14792,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ConnectionFactory.java">org/apache/hadoop/hbase/client/ConnectionFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -14812,19 +14807,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.net.InetAddress.</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -14833,101 +14828,101 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Delete.java">org/apache/hadoop/hbase/client/Delete.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>112</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>128</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>129</td></tr>
+<td>128</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>129</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>162</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Get.java">org/apache/hadoop/hbase/client/Get.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.filter.Filter' import.</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>136</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>145</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>294</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>304</td></tr>
+<td>294</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>304</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
@@ -14935,13 +14930,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.HConnectionTestingUtility.java">org/apache/hadoop/hbase/client/HConnectionTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -14950,13 +14945,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MetricsConnection.java">org/apache/hadoop/hbase/client/MetricsConnection.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -14965,19 +14960,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MultiResponse.java">org/apache/hadoop/hbase/client/MultiResponse.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -14986,166 +14981,166 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Mutation.java">org/apache/hadoop/hbase/client/Mutation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>174</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>176</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>177</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>287</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>366</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>376</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>380</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>387</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>399</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>403</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>410</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>414</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>415</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>513</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>577</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>592</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>607</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>709</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>718</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>719</td></tr>
+<td>718</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>719</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>721</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Operation.java">org/apache/hadoop/hbase/client/Operation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.JsonMapper' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -15154,13 +15149,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.PackagePrivateFieldAccessor.java">org/apache/hadoop/hbase/client/PackagePrivateFieldAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -15169,118 +15164,118 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Put.java">org/apache/hadoop/hbase/client/Put.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>71</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>100</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>101</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>102</td></tr>
+<td>101</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>102</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>103</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Query.java">org/apache/hadoop/hbase/client/Query.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap' import.</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>140</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>173</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -15289,13 +15284,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RawAsyncHBaseAdmin.java">org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -15304,133 +15299,133 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionInfo.java">org/apache/hadoop/hbase/client/RegionInfo.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>130</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 2, expected level should be 4.</td>
 <td>160</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>165</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>243</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>244</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>245</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>312</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>388</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>392</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>398</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>402</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>416</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>428</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>596</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>630</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>642</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>674</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>690</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>694</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -15439,13 +15434,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionInfoBuilder.java">org/apache/hadoop/hbase/client/RegionInfoBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -15454,109 +15449,109 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionInfoDisplay.java">org/apache/hadoop/hbase/client/RegionInfoDisplay.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.client.RegionInfo.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.client.RegionInfoBuilder.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'RegionInfoBuilder' has incorrect indentation level 4, expected level should be 6.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>68</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>69</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -15565,13 +15560,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionLocator.java">org/apache/hadoop/hbase/client/RegionLocator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -15580,56 +15575,56 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionReplicaUtil.java">org/apache/hadoop/hbase/client/RegionReplicaUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>58</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>93</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>128</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>132</td></tr>
+<td>128</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
+<td>132</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
@@ -15637,58 +15632,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RequestController.java">org/apache/hadoop/hbase/client/RequestController.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>67</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>101</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>104</td></tr>
+<td>101</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>104</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>115</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RequestControllerFactory.java">org/apache/hadoop/hbase/client/RequestControllerFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.ReflectionUtils' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -15697,85 +15692,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Result.java">org/apache/hadoop/hbase/client/Result.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.KeyValue' import.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>258</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>260</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>366</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>370</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>398</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>679</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>854</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>871</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>872</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>890</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -15784,25 +15779,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ResultScanner.java">org/apache/hadoop/hbase/client/ResultScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.metrics.ScanMetrics' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -15811,13 +15806,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RetriesExhaustedException.java">org/apache/hadoop/hbase/client/RetriesExhaustedException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -15826,25 +15821,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException.java">org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'extends' has incorrect indentation level 0, expected level should be 2.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -15853,13 +15848,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RowAccess.java">org/apache/hadoop/hbase/client/RowAccess.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -15868,82 +15863,70 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Scan.java">org/apache/hadoop/hbase/client/Scan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>337</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>704</td></tr>
+<td>674</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>714</td></tr>
+<td>684</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>746</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>886</td></tr></table></div>
+<td>716</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.SimpleRequestController.java">org/apache/hadoop/hbase/client/SimpleRequestController.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.ConcurrentMapUtils.computeIfAbsent' import.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda' has incorrect indentation level 12, expected level should be one of the following: 6, 8.</td>
 <td>239</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -15952,13 +15935,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.SimpleScanResultConsumer.java">org/apache/hadoop/hbase/client/SimpleScanResultConsumer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -15967,13 +15950,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.SnapshotDescription.java">org/apache/hadoop/hbase/client/SnapshotDescription.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -15982,259 +15965,259 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Table.java">org/apache/hadoop/hbase/client/Table.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>131</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>281</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>282</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>283</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>285</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>286</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>508</td></tr>
+<td>286</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>508</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>531</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableDescriptor.java">org/apache/hadoop/hbase/client/TableDescriptor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>102</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>122</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>132</td></tr>
+<td>122</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>132</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>169</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TableDescriptorBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class TableDescriptorBuilder should be declared as final.</td>
 <td>59</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>157</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>343</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>625</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>747</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>758</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>769</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>795</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>873</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>977</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1011</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1073</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>1093</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1296</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>1331</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1341</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1347</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1380</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1406</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1500</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1583</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -16243,232 +16226,232 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.TableName' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>50</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>56</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>57</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>58</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>59</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>183</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>236</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>237</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>241</td></tr>
+<td>237</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
+<td>241</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
 <td>242</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdmin.java">org/apache/hadoop/hbase/client/TestAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -16477,25 +16460,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdmin2.java">org/apache/hadoop/hbase/client/TestAdmin2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 1, expected level should be 2.</td>
 <td>393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -16504,37 +16487,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdmin4.java">org/apache/hadoop/hbase/client/TestAdmin4.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
 <td>Using the '.*' form of import should be avoided - org.junit.Assert.*.</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.util.EnumSet.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.apache.hadoop.hbase.ClusterMetrics.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.slf4j.Logger.</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -16543,25 +16526,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdminShell.java">org/apache/hadoop/hbase/client/TestAdminShell.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.io.IOException.</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.jruby.embed.PathType.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -16570,25 +16553,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdminShell2.java">org/apache/hadoop/hbase/client/TestAdminShell2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.io.IOException.</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.jruby.embed.PathType.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -16597,13 +16580,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncClusterAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -16612,13 +16595,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncNamespaceAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncNamespaceAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -16627,55 +16610,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncQuotaAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -16684,38 +16667,38 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncRegionAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>139</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'for' construct must use '{}'s.</td>
-<td>292</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>299</td></tr>
+<td>292</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'for' construct must use '{}'s.</td>
+<td>299</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization lcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
@@ -16723,25 +16706,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncRegionAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>236</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -16750,13 +16733,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -16765,13 +16748,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -16780,13 +16763,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableAdminApi3.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi3.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -16795,19 +16778,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableScanMetrics.java">org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -16816,13 +16799,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableScanner.java">org/apache/hadoop/hbase/client/TestAsyncTableScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -16831,26 +16814,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAvoidCellReferencesIntoShippedBlocks.java">org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>97</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>120</td></tr>
+<td>97</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>120</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
@@ -16858,38 +16841,38 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestBlockEvictionFromClient.java">org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>109</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>130</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>138</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>148</td></tr>
+<td>138</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>148</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child has incorrect indentation level 14, expected level should be 12.</td>
@@ -16897,67 +16880,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestCatalogReplicaLoadBalanceSimpleSelector.java">org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' should be on the previous line.</td>
 <td>100</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>122</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -16966,19 +16949,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestCheckAndMutate.java">org/apache/hadoop/hbase/client/TestCheckAndMutate.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -16987,13 +16970,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -17002,19 +16985,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestEnableTable.java">org/apache/hadoop/hbase/client/TestEnableTable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -17023,49 +17006,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestFromClientSide3.java">org/apache/hadoop/hbase/client/TestFromClientSide3.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>372</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>977</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1147</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>1149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -17074,19 +17057,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestFromClientSideNoCodec.java">org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -17095,19 +17078,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestFromClientSideScanExcpetion.java">org/apache/hadoop/hbase/client/TestFromClientSideScanExcpetion.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>178</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -17116,37 +17099,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestGetScanColumnsWithNewVersionBehavior.java">org/apache/hadoop/hbase/client/TestGetScanColumnsWithNewVersionBehavior.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.KeyValue' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.List' import.</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ArrayList' import.</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -17155,18 +17138,12 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestImmutableScan.java">org/apache/hadoop/hbase/client/TestImmutableScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>imports</td>
-<td>ImportOrder</td>
-<td>Wrong order for 'org.junit.Assert.assertArrayEquals' import.</td>
-<td>42</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
@@ -17750,33 +17727,6 @@
 <td>Unused import - org.junit.Test.</td>
 <td>26</td></tr></table></div>
 <div class="section">
-<h3 id="org.apache.hadoop.hbase.client.TestSmallReversedScanner.java">org/apache/hadoop/hbase/client/TestSmallReversedScanner.java</h3>
-<table border="0" class="table table-striped">
-<tr class="a">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>77</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 117).</td>
-<td>119</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>121</td></tr></table></div>
-<div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestSnapshotCloneIndependence.java">org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -34914,8 +34864,8 @@
 <th>Line</th></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>annotation</td>
+<td>MissingDeprecated</td>
 <td>Javadoc comment at column 14 has parse error. Details: mismatched input ':' expecting &lt;EOF&gt; while parsing JAVADOC</td>
 <td>46</td></tr></table></div>
 <div class="section">
@@ -49998,8 +49948,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>annotation</td>
+<td>MissingDeprecated</td>
 <td>Javadoc comment at column 54 has parse error. Details: no viable alternative at input '(' while parsing JAVADOC_INLINE_TAG</td>
 <td>59</td></tr>
 <tr class="a">
@@ -62841,216 +62791,264 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1119</td></tr>
+<td>1116</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1247</td></tr>
+<td>1239</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1318</td></tr>
+<td>1310</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1319</td></tr>
+<td>1311</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1321</td></tr>
+<td>1313</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1335</td></tr>
+<td>1327</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1372</td></tr>
+<td>1364</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1373</td></tr>
+<td>1365</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1374</td></tr>
+<td>1366</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1376</td></tr>
+<td>1368</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1386</td></tr>
+<td>1378</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1387</td></tr>
+<td>1379</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1389</td></tr>
+<td>1381</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1392</td></tr>
+<td>1384</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1416</td></tr>
+<td>1408</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1417</td></tr>
+<td>1409</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1502</td></tr>
+<td>1494</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1504</td></tr>
+<td>1496</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1560</td></tr>
+<td>1552</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1563</td></tr>
+<td>1555</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1583</td></tr>
+<td>1575</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1589</td></tr>
+<td>1581</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1623</td></tr>
+<td>1615</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>1672</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>1674</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1679</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1680</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1681</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1682</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1683</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>1684</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1685</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>1686</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1687</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1688</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1689</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1690</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1691</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1692</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1693</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1694</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1695</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>1697</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1702</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>1703</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1704</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1705</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1706</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>1707</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1708</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>1709</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1710</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -63060,550 +63058,502 @@
 <td>1711</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1712</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1713</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1714</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1715</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1716</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1717</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>1718</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1719</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1732</td></tr>
+<td>1724</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1798</td></tr>
+<td>1790</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1799</td></tr>
+<td>1791</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1800</td></tr>
+<td>1792</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1818</td></tr>
+<td>1810</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 130).</td>
-<td>1823</td></tr>
+<td>1815</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1837</td></tr>
+<td>1829</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1838</td></tr>
+<td>1830</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1839</td></tr>
+<td>1831</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 124).</td>
-<td>1842</td></tr>
+<td>1834</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1857</td></tr>
+<td>1849</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1859</td></tr>
+<td>1851</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 124).</td>
-<td>1861</td></tr>
+<td>1853</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
-<td>1871</td></tr>
+<td>1863</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1873</td></tr>
+<td>1865</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 117).</td>
-<td>1890</td></tr>
+<td>1882</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1891</td></tr>
+<td>1883</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>1892</td></tr>
+<td>1884</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1905</td></tr>
+<td>1897</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1923</td></tr>
+<td>1915</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1935</td></tr>
+<td>1927</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>2148</td></tr>
+<td>2140</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>2173</td></tr>
+<td>2165</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2221</td></tr>
+<td>2213</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2225</td></tr>
+<td>2217</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>2266</td></tr>
+<td>2258</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2375</td></tr>
+<td>2367</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2379</td></tr>
+<td>2371</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2386</td></tr>
+<td>2378</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2388</td></tr>
+<td>2380</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2391</td></tr>
+<td>2383</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2406</td></tr>
+<td>2398</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2418</td></tr>
+<td>2410</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2422</td></tr>
+<td>2414</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2429</td></tr>
+<td>2421</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2431</td></tr>
+<td>2423</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2434</td></tr>
+<td>2426</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2449</td></tr>
+<td>2441</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2463</td></tr>
+<td>2455</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2482</td></tr>
+<td>2474</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2501</td></tr>
+<td>2493</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2532</td></tr>
+<td>2524</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2563</td></tr>
+<td>2555</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2577</td></tr>
+<td>2569</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2591</td></tr>
+<td>2583</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2605</td></tr>
+<td>2597</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2736</td></tr>
+<td>2728</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2759</td></tr>
+<td>2751</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2774</td></tr>
+<td>2766</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2789</td></tr>
+<td>2781</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2803</td></tr>
+<td>2795</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2817</td></tr>
+<td>2809</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2818</td></tr>
+<td>2810</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2819</td></tr>
+<td>2811</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>2958</td></tr>
+<td>2950</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
-<td>3004</td></tr>
+<td>2996</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>3041</td></tr>
+<td>3033</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>3053</td></tr>
+<td>3045</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>3065</td></tr>
+<td>3057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>3081</td></tr>
+<td>3073</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3132</td></tr>
+<td>3124</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3145</td></tr>
+<td>3137</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 3, expected level should be 2.</td>
-<td>3162</td></tr>
+<td>3154</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3164</td></tr>
+<td>3156</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3165</td></tr>
+<td>3157</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3167</td></tr>
+<td>3159</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3168</td></tr>
+<td>3160</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3169</td></tr>
+<td>3161</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
-<td>3170</td></tr>
+<td>3162</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3254</td></tr>
+<td>3246</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3255</td></tr>
+<td>3247</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3256</td></tr>
+<td>3248</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3258</td></tr>
+<td>3250</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3259</td></tr>
+<td>3251</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3262</td></tr>
+<td>3254</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>3316</td></tr>
+<td>3308</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>3331</td></tr>
+<td>3323</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
-<td>3356</td></tr>
+<td>3348</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3380</td></tr>
+<td>3372</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3381</td></tr>
+<td>3373</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3382</td></tr>
+<td>3374</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3383</td></tr>
+<td>3375</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3384</td></tr></table></div>
+<td>3376</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.shaded.protobuf.RequestConverter.java">org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java</h3>
 <table border="0" class="table table-striped">
@@ -73404,7 +73354,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle.rss b/checkstyle.rss
index df3456e..e5eda3a 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@
     <copyright>&#169;2007 - 2021 The Apache Software Foundation</copyright>
     <item>
       <title>File: 4444,
-             Errors: 8863,
+             Errors: 8857,
              Warnings: 0,
              Infos: 0
       </title>
@@ -2888,6 +2888,20 @@
               </tr>
                           <tr>
                 <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestPreadReversedScanner.java">org/apache/hadoop/hbase/client/TestPreadReversedScanner.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.SinusoidalFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SinusoidalFileListGenerator.java</a>
                 </td>
                 <td>
@@ -5809,7 +5823,7 @@
                   0
                 </td>
                 <td>
-                  2
+                  1
                 </td>
               </tr>
                           <tr>
@@ -14032,20 +14046,6 @@
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSmallReversedScanner.java">org/apache/hadoop/hbase/client/TestSmallReversedScanner.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  3
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.HadoopShimsImpl.java">org/apache/hadoop/hbase/HadoopShimsImpl.java</a>
                 </td>
                 <td>
@@ -37491,7 +37491,7 @@
                   0
                 </td>
                 <td>
-                  5
+                  3
                 </td>
               </tr>
                           <tr>
diff --git a/coc.html b/coc.html
index 6224eeb..7d87b46 100644
--- a/coc.html
+++ b/coc.html
@@ -230,7 +230,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 18ff329..dfa1200 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -302,7 +302,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index ad26db0..44eb579 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -864,7 +864,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 43ece9a..14218c4 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -183,7 +183,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 7b77f7c..3730f77 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1190,7 +1190,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/deprecated-list.html b/devapidocs/deprecated-list.html
index 3b993d0..628fe44 100644
--- a/devapidocs/deprecated-list.html
+++ b/devapidocs/deprecated-list.html
@@ -1381,15 +1381,6 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#isSmall--">org.apache.hadoop.hbase.client.Scan.isSmall()</a>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>Scan.setSmall(boolean)</code></a></span></div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#isSmall--">org.apache.hadoop.hbase.client.ImmutableScan.isSmall()</a></td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RegionInfo.html#isSplitParent--">org.apache.hadoop.hbase.client.RegionInfo.isSplitParent()</a>
 <div class="block"><span class="deprecationComment">since 3.0.0 and will be removed in 4.0.0, Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#isSplit--"><code>RegionInfo.isSplit()</code></a> instead.</span></div>
 </td>
@@ -1806,26 +1797,6 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.Scan.setSmall(boolean)</a>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.ImmutableScan.setSmall(boolean)</a></td>
-</tr>
-<tr class="altColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.Scan.setTimeStamp(long)</a>
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.ImmutableScan.setTimeStamp(long)</a></td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#setWriteBufferPeriodicFlushTimerTickMs-long-">org.apache.hadoop.hbase.client.BufferedMutatorParams.setWriteBufferPeriodicFlushTimerTickMs(long)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. We use a common timer in the whole client
              implementation so you can not set it any more.</span></div>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index d508752..90e2095 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -68769,17 +68769,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/namequeues/impl/SlowLogQueueService.html#isSlowLogTableEnabled">isSlowLogTableEnabled</a></span> - Variable in class org.apache.hadoop.hbase.namequeues.impl.<a href="org/apache/hadoop/hbase/namequeues/impl/SlowLogQueueService.html" title="class in org.apache.hadoop.hbase.namequeues.impl">SlowLogQueueService</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#isSmall--">isSmall()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ImmutableScan.html" title="class in org.apache.hadoop.hbase.client">ImmutableScan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>Scan.setSmall(boolean)</code></a></span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#isSnapshotCleanupEnabled--">isSnapshotCleanupEnabled()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Query the current state of the auto snapshot cleanup based on TTL.</div>
@@ -110920,19 +110909,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/namequeues/request/NamedQueueGetRequest.html#setSlowLogResponseRequest-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SlowLogResponseRequest-">setSlowLogResponseRequest(AdminProtos.SlowLogResponseRequest)</a></span> - Method in class org.apache.hadoop.hbase.namequeues.request.<a href="org/apache/hadoop/hbase/namequeues/request/NamedQueueGetRequest.html" title="class in org.apache.hadoop.hbase.namequeues.request">NamedQueueGetRequest</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setSmall-boolean-">setSmall(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ImmutableScan.html" title="class in org.apache.hadoop.hbase.client">ImmutableScan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
-   <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/SnapshotCleanupTracker.html#setSnapshotCleanupEnabled-boolean-">setSnapshotCleanupEnabled(boolean)</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/SnapshotCleanupTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">SnapshotCleanupTracker</a></dt>
 <dd>
 <div class="block">Set snapshot auto clean on/off</div>
@@ -111422,10 +111398,6 @@
 <dd>
 <div class="block">Get versions of columns with the specified timestamp.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeStamp-long-">setTimeStamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ImmutableScan.html" title="class in org.apache.hadoop.hbase.client">ImmutableScan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ImmutableScan.html" title="class in org.apache.hadoop.hbase.client">ImmutableScan</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Increment.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
@@ -111440,13 +111412,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Put.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
-</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Get versions of columns with the specified timestamp.</div>
@@ -114076,14 +114041,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#slowSyncRollThreshold">slowSyncRollThreshold</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#small">small</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
-<dd>
-<div class="block">Set it true for small scan to get better performance Small scan should use pread and big scan
- can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)
- cause too much network io [89-fb] Using pread for non-compaction read request
- https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we
- would do openScanner,next,closeScanner in one RPC call.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SMALL_COMPACTION_QUEUE_LENGTH">SMALL_COMPACTION_QUEUE_LENGTH</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SMALL_COMPACTION_QUEUE_LENGTH_DESC">SMALL_COMPACTION_QUEUE_LENGTH_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index f869e05..b26c5f2 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,9 +166,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
index 1abd30e0..d1aab29 100644
--- a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
@@ -103,8 +103,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ChaosServiceName.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ChaosServiceName</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ImmutableScan.html b/devapidocs/org/apache/hadoop/hbase/client/ImmutableScan.html
index 63b138f..1b1f3ca 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ImmutableScan.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ImmutableScan.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":42,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":42,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":42,"i79":10,"i80":10,"i81":42,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":42,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -435,87 +435,81 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i43" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#isSmall--">isSmall</a></span>()</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-</td>
-</tr>
-<tr id="i44" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#numFamilies--">numFamilies</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#readAllVersions--">readAllVersions</a></span>()</code>
 <div class="block">Get all available versions.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#readVersions-int-">readVersions</a></span>(int&nbsp;versions)</code>
 <div class="block">Get up to the specified number of versions of each column.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#resetMvccReadPoint--">resetMvccReadPoint</a></span>()</code>
 <div class="block">Set the mvcc read point to -1 which means do not use it.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setACL-java.util.Map-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setACL-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
       <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setAllowPartialResults-boolean-">setAllowPartialResults</a></span>(boolean&nbsp;allowPartialResults)</code>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setAsyncPrefetch-boolean-">setAsyncPrefetch</a></span>(boolean&nbsp;asyncPrefetch)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setAttribute-java.lang.String-byte:A-">setAttribute</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
             byte[]&nbsp;value)</code>
 <div class="block">Sets an attribute.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">setAuthorizations</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</code>
 <div class="block">Sets the authorizations to be used by this Query</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setBatch-int-">setBatch</a></span>(int&nbsp;batch)</code>
 <div class="block">Set the maximum number of cells to return for each call to next().</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setCacheBlocks-boolean-">setCacheBlocks</a></span>(boolean&nbsp;cacheBlocks)</code>
 <div class="block">Set whether blocks should be cached for this Scan.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setCaching-int-">setCaching</a></span>(int&nbsp;caching)</code>
 <div class="block">Set the number of rows for caching that will be passed to scanners.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setColumnFamilyTimeRange-byte:A-long-long-">setColumnFamilyTimeRange</a></span>(byte[]&nbsp;cf,
                         long&nbsp;minStamp,
@@ -524,134 +518,128 @@
  [minStamp, maxStamp) on a per CF bases.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">setConsistency</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</code>
 <div class="block">Sets the consistency level for this operation</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setFamilyMap-java.util.Map-">setFamilyMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</code>
 <div class="block">Setting the familyMap</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">setFilter</a></span>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</code>
 <div class="block">Apply the specified server-side filter when performing the Query.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setId-java.lang.String-">setId</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</code>
 <div class="block">This method allows you to set an identifier on an operation.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">setIsolationLevel</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</code>
 <div class="block">Set the isolation level for this query.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setLimit-int-">setLimit</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the limit of rows for this scan.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setLoadColumnFamiliesOnDemand-boolean-">setLoadColumnFamiliesOnDemand</a></span>(boolean&nbsp;value)</code>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false).</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setMaxResultSize-long-">setMaxResultSize</a></span>(long&nbsp;maxResultSize)</code>
 <div class="block">Set the maximum result size.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setMaxResultsPerColumnFamily-int-">setMaxResultsPerColumnFamily</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setMvccReadPoint-long-">setMvccReadPoint</a></span>(long&nbsp;mvccReadPoint)</code>
 <div class="block">Set the mvcc read point used to open a scanner.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setNeedCursorResult-boolean-">setNeedCursorResult</a></span>(boolean&nbsp;needCursorResult)</code>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setOneRowLimit--">setOneRowLimit</a></span>()</code>
 <div class="block">Call this when you only want to get one row.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setRaw-boolean-">setRaw</a></span>(boolean&nbsp;raw)</code>
 <div class="block">Enable/disable "raw" mode for this scan.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">setReadType</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</code>
 <div class="block">Set the read type for this scan.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setReplicaId-int-">setReplicaId</a></span>(int&nbsp;id)</code>
 <div class="block">Specify region replica id where Query will fetch data from.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setReversed-boolean-">setReversed</a></span>(boolean&nbsp;reversed)</code>
 <div class="block">Set whether this scan is a reversed one</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setRowOffsetPerColumnFamily-int-">setRowOffsetPerColumnFamily</a></span>(int&nbsp;offset)</code>
 <div class="block">Set offset for the row per Column Family.</div>
 </td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setRowPrefixFilter-byte:A-">setRowPrefixFilter</a></span>(byte[]&nbsp;rowPrefix)</code>
 <div class="block">Set a filter (using stopRow and startRow) so the result set only contains rows where the
  rowKey starts with the specified prefix.</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setScanMetricsEnabled-boolean-">setScanMetricsEnabled</a></span>(boolean&nbsp;enabled)</code>
 <div class="block">Enable collection of <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a>.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-</td>
-</tr>
-<tr id="i79" class="rowColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeRange-long-long-">setTimeRange</a></span>(long&nbsp;minStamp,
             long&nbsp;maxStamp)</code>
@@ -659,77 +647,71 @@
  [minStamp, maxStamp).</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setTimestamp-long-">setTimestamp</a></span>(long&nbsp;timestamp)</code>
 <div class="block">Get versions of columns with the specified timestamp.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-</td>
-</tr>
-<tr id="i82" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toJSON--">toJSON</a></span>()</code>
 <div class="block">Produces a JSON object sufficient for description of a query
  in a debugging or logging context.</div>
 </td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toJSON-int-">toJSON</a></span>(int&nbsp;maxCols)</code>
 <div class="block">Produces a JSON object for fingerprint and details exposure in a
  parseable format.</div>
 </td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toMap--">toMap</a></span>()</code>
 <div class="block">Produces a Map containing a full summary of a query.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toMap-int-">toMap</a></span>(int&nbsp;maxCols)</code>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toString--">toString</a></span>()</code>
 <div class="block">Produces a string representation of this Operation.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#toString-int-">toString</a></span>(int&nbsp;maxCols)</code>
 <div class="block">Produces a string representation of this Operation.</div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#withStartRow-byte:A-">withStartRow</a></span>(byte[]&nbsp;startRow)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#withStartRow-byte:A-boolean-">withStartRow</a></span>(byte[]&nbsp;startRow,
             boolean&nbsp;inclusive)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#withStopRow-byte:A-">withStopRow</a></span>(byte[]&nbsp;stopRow)</code>
 <div class="block">Set the stop row of the scan.</div>
 </td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#withStopRow-byte:A-boolean-">withStopRow</a></span>(byte[]&nbsp;stopRow,
            boolean&nbsp;inclusive)</code>
@@ -875,40 +857,13 @@
 </dl>
 </li>
 </ul>
-<a name="setTimeStamp-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setTimeStamp</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.68">setTimeStamp</a>(long&nbsp;timestamp)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">Scan</a></code></span></div>
-<div class="block">Get versions of columns with the specified timestamp. Note, default maximum
- versions to return is 1.  If your time range spans more than one version
- and you want all versions returned, up the number of versions beyond the
- defaut.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>timestamp</code> - version timestamp</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>this</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--"><code>Scan.readAllVersions()</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-"><code>Scan.readVersions(int)</code></a></dd>
-</dl>
-</li>
-</ul>
 <a name="setTimestamp-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimestamp</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.73">setTimestamp</a>(long&nbsp;timestamp)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.67">setTimestamp</a>(long&nbsp;timestamp)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">Scan</a></code></span></div>
 <div class="block">Get versions of columns with the specified timestamp. Note, default maximum
  versions to return is 1.  If your time range spans more than one version
@@ -933,7 +888,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamilyTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.78">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.72">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
                                      long&nbsp;minStamp,
                                      long&nbsp;maxStamp)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setColumnFamilyTimeRange-byte:A-long-long-">Query</a></code></span></div>
@@ -960,7 +915,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.84">withStartRow</a>(byte[]&nbsp;startRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.78">withStartRow</a>(byte[]&nbsp;startRow)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">Scan</a></code></span></div>
 <div class="block">Set the start row of the scan.
  <p>
@@ -982,7 +937,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.89">withStartRow</a>(byte[]&nbsp;startRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.83">withStartRow</a>(byte[]&nbsp;startRow,
                          boolean&nbsp;inclusive)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-boolean-">Scan</a></code></span></div>
 <div class="block">Set the start row of the scan.
@@ -1009,7 +964,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.94">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.88">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-">Scan</a></code></span></div>
 <div class="block">Set the stop row of the scan.
  <p>
@@ -1034,7 +989,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.99">withStopRow</a>(byte[]&nbsp;stopRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.93">withStopRow</a>(byte[]&nbsp;stopRow,
                         boolean&nbsp;inclusive)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-boolean-">Scan</a></code></span></div>
 <div class="block">Set the stop row of the scan.
@@ -1058,7 +1013,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRowPrefixFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.104">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.98">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">Scan</a></code></span></div>
 <div class="block"><p>Set a filter (using stopRow and startRow) so the result set only contains rows where the
  rowKey starts with the specified prefix.</p>
@@ -1083,7 +1038,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readAllVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.110">readAllVersions</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.104">readAllVersions</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--">Scan</a></code></span></div>
 <div class="block">Get all available versions.</div>
 <dl>
@@ -1100,7 +1055,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.116">readVersions</a>(int&nbsp;versions)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.110">readVersions</a>(int&nbsp;versions)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-">Scan</a></code></span></div>
 <div class="block">Get up to the specified number of versions of each column.</div>
 <dl>
@@ -1119,7 +1074,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatch</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.121">setBatch</a>(int&nbsp;batch)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.115">setBatch</a>(int&nbsp;batch)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setBatch-int-">Scan</a></code></span></div>
 <div class="block">Set the maximum number of cells to return for each call to next(). Callers should be aware
  that this is not equivalent to calling <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-"><code>Scan.setAllowPartialResults(boolean)</code></a>.
@@ -1142,7 +1097,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.126">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.120">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultsPerColumnFamily-int-">Scan</a></code></span></div>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 <dl>
@@ -1159,7 +1114,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.132">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.126">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowOffsetPerColumnFamily-int-">Scan</a></code></span></div>
 <div class="block">Set offset for the row per Column Family.</div>
 <dl>
@@ -1176,7 +1131,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCaching</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.138">setCaching</a>(int&nbsp;caching)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.132">setCaching</a>(int&nbsp;caching)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCaching-int-">Scan</a></code></span></div>
 <div class="block">Set the number of rows for caching that will be passed to scanners.
  If not set, the Configuration setting <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#HBASE_CLIENT_SCANNER_CACHING"><code>HConstants.HBASE_CLIENT_SCANNER_CACHING</code></a> will
@@ -1196,7 +1151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.143">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.137">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-">Scan</a></code></span></div>
 <div class="block">Set the maximum result size. The default is -1; this means that no specific
  maximum result size will be set for this scan, and the global configured
@@ -1215,7 +1170,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.149">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.143">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">Query</a></code></span></div>
 <div class="block">Apply the specified server-side filter when performing the Query. Only
  <a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html#filterCell-org.apache.hadoop.hbase.Cell-"><code>Filter.filterCell(org.apache.hadoop.hbase.Cell)</code></a> is called AFTER all tests for ttl,
@@ -1236,7 +1191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.154">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.148">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFamilyMap-java.util.Map-">Scan</a></code></span></div>
 <div class="block">Setting the familyMap</div>
 <dl>
@@ -1255,7 +1210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCacheBlocks</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.159">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.153">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCacheBlocks-boolean-">Scan</a></code></span></div>
 <div class="block">Set whether blocks should be cached for this Scan.
  <p>
@@ -1277,7 +1232,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReversed</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.165">setReversed</a>(boolean&nbsp;reversed)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.159">setReversed</a>(boolean&nbsp;reversed)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReversed-boolean-">Scan</a></code></span></div>
 <div class="block">Set whether this scan is a reversed one
  <p>
@@ -1298,7 +1253,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAllowPartialResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.170">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.164">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-">Scan</a></code></span></div>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.
@@ -1321,7 +1276,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLoadColumnFamiliesOnDemand</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.176">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.170">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setLoadColumnFamiliesOnDemand-boolean-">Query</a></code></span></div>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false). On-demand CF loading doesn't load column families until necessary, e.g.
@@ -1349,7 +1304,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRaw</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.182">setRaw</a>(boolean&nbsp;raw)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.176">setRaw</a>(boolean&nbsp;raw)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRaw-boolean-">Scan</a></code></span></div>
 <div class="block">Enable/disable "raw" mode for this scan.
  If "raw" is enabled the scan will return all
@@ -1366,41 +1321,13 @@
 </dl>
 </li>
 </ul>
-<a name="setSmall-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.188">setSmall</a>(boolean&nbsp;small)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">Scan</a></code></span></div>
-<div class="block">Set whether this scan is a small scan
- <p>
- Small scan should use pread and big scan can use seek + read seek + read is fast but can cause
- two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for
- non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,
- if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the
- better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one
- data block(64KB), it could be considered as a small scan.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a>, 
-<a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
 <a name="setAttribute-java.lang.String-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.193">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.181">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                          byte[]&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute-java.lang.String-byte:A-">Attributes</a></code></span></div>
 <div class="block">Sets an attribute.
@@ -1423,7 +1350,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.198">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.186">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId-java.lang.String-">OperationWithAttributes</a></code></span></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -1444,7 +1371,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAuthorizations</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.203">setAuthorizations</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.191">setAuthorizations</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">Query</a></code></span></div>
 <div class="block">Sets the authorizations to be used by this Query</div>
 <dl>
@@ -1459,7 +1386,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.209">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.197">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.util.Map-">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1474,7 +1401,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.214">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.202">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                    <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1491,7 +1418,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setConsistency</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.219">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.207">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">Query</a></code></span></div>
 <div class="block">Sets the consistency level for this operation</div>
 <dl>
@@ -1508,7 +1435,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicaId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.225">setReplicaId</a>(int&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.213">setReplicaId</a>(int&nbsp;id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setReplicaId-int-">Query</a></code></span></div>
 <div class="block">Specify region replica id where Query will fetch data from. Use this together with
  <a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-"><code>Query.setConsistency(Consistency)</code></a> passing <a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html#TIMELINE"><code>Consistency.TIMELINE</code></a> to read data from
@@ -1526,7 +1453,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setIsolationLevel</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.230">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.218">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">Query</a></code></span></div>
 <div class="block">Set the isolation level for this query. If the
  isolation level is set to READ_UNCOMMITTED, then
@@ -1550,7 +1477,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.236">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.224">setPriority</a>(int&nbsp;priority)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setPriority-int-">setPriority</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1563,7 +1490,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setScanMetricsEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.241">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.229">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setScanMetricsEnabled-boolean-">Scan</a></code></span></div>
 <div class="block">Enable collection of <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a>. For advanced users.</div>
 <dl>
@@ -1581,7 +1508,7 @@
 <li class="blockList">
 <h4>setAsyncPrefetch</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.248">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.236">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1595,7 +1522,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.254">setLimit</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.242">setLimit</a>(int&nbsp;limit)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-">Scan</a></code></span></div>
 <div class="block">Set the limit of rows for this scan. We will terminate the scan if the number of returned rows
  reaches this value.
@@ -1617,7 +1544,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setOneRowLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.259">setOneRowLimit</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.247">setOneRowLimit</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setOneRowLimit--">Scan</a></code></span></div>
 <div class="block">Call this when you only want to get one row. It will set <code>limit</code> to <code>1</code>, and also
  set <code>readType</code> to <a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html#PREAD"><code>Scan.ReadType.PREAD</code></a>.</div>
@@ -1635,7 +1562,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.265">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.253">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">Scan</a></code></span></div>
 <div class="block">Set the read type for this scan.
  <p>
@@ -1655,7 +1582,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMvccReadPoint</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.270">setMvccReadPoint</a>(long&nbsp;mvccReadPoint)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.258">setMvccReadPoint</a>(long&nbsp;mvccReadPoint)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMvccReadPoint-long-">Scan</a></code></span></div>
 <div class="block">Set the mvcc read point used to open a scanner.</div>
 <dl>
@@ -1670,7 +1597,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>resetMvccReadPoint</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.276">resetMvccReadPoint</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.264">resetMvccReadPoint</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#resetMvccReadPoint--">Scan</a></code></span></div>
 <div class="block">Set the mvcc read point to -1 which means do not use it.</div>
 <dl>
@@ -1685,7 +1612,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setNeedCursorResult</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.282">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.270">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setNeedCursorResult-boolean-">Scan</a></code></span></div>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout. However the scanner will return a Result
@@ -1716,7 +1643,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.288">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.276">getMaxResultSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultSize--">getMaxResultSize</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1731,7 +1658,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.293">getFamilyMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.281">getFamilyMap</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilyMap--">Scan</a></code></span></div>
 <div class="block">Getting the familyMap</div>
 <dl>
@@ -1748,7 +1675,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.298">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.286">numFamilies</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#numFamilies--">numFamilies</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1763,7 +1690,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamilies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.303">hasFamilies</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.291">hasFamilies</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFamilies--">hasFamilies</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1778,7 +1705,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilies</h4>
-<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.308">getFamilies</a>()</pre>
+<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.296">getFamilies</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilies--">getFamilies</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1793,7 +1720,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.318">getStartRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.306">getStartRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStartRow--">getStartRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1808,7 +1735,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStartRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.324">includeStartRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.312">includeStartRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStartRow--">includeStartRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1823,7 +1750,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStopRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.329">getStopRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.317">getStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStopRow--">getStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1838,7 +1765,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStopRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.335">includeStopRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.323">includeStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStopRow--">includeStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1853,7 +1780,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxVersions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.340">getMaxVersions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.328">getMaxVersions</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxVersions--">getMaxVersions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1868,7 +1795,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.345">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.333">getBatch</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getBatch--">getBatch</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1883,7 +1810,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.350">getMaxResultsPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.338">getMaxResultsPerColumnFamily</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultsPerColumnFamily--">getMaxResultsPerColumnFamily</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1898,7 +1825,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.355">getRowOffsetPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.343">getRowOffsetPerColumnFamily</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getRowOffsetPerColumnFamily--">Scan</a></code></span></div>
 <div class="block">Method for retrieving the scan's offset per row per column
  family (#kvs to be skipped)</div>
@@ -1916,7 +1843,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaching</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.360">getCaching</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.348">getCaching</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCaching--">getCaching</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1931,7 +1858,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.365">getTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.353">getTimeRange</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getTimeRange--">getTimeRange</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1946,7 +1873,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.370">getFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.358">getFilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFilter--">getFilter</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1961,7 +1888,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.375">hasFilter</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.363">hasFilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFilter--">hasFilter</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -1976,7 +1903,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheBlocks</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.380">getCacheBlocks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.368">getCacheBlocks</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCacheBlocks--">Scan</a></code></span></div>
 <div class="block">Get whether blocks should be cached for this Scan.</div>
 <dl>
@@ -1994,7 +1921,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReversed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.385">isReversed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.373">isReversed</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isReversed--">Scan</a></code></span></div>
 <div class="block">Get whether this scan is a reversed one.</div>
 <dl>
@@ -2011,7 +1938,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllowPartialResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.390">getAllowPartialResults</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.378">getAllowPartialResults</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getAllowPartialResults--">getAllowPartialResults</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2028,7 +1955,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getACL</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.395">getACL</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.383">getACL</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getACL--">getACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -2043,7 +1970,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFingerprint</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.401">getFingerprint</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.389">getFingerprint</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFingerprint--">Scan</a></code></span></div>
 <div class="block">Compile the table and column family (i.e. schema) information
  into a String. Useful for parsing and aggregation by debugging,
@@ -2062,7 +1989,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.406">toMap</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.394">toMap</a>(int&nbsp;maxCols)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#toMap-int-">Scan</a></code></span></div>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.
@@ -2083,7 +2010,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.411">isRaw</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.399">isRaw</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isRaw--">isRaw</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2092,34 +2019,13 @@
 </dl>
 </li>
 </ul>
-<a name="isSmall--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.417">isSmall</a>()</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isSmall--">Scan</a></code></span></div>
-<div class="block">Get whether this scan is a small scan</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if small scan</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
 <a name="isScanMetricsEnabled--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isScanMetricsEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.422">isScanMetricsEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.404">isScanMetricsEnabled</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2134,7 +2040,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isAsyncPrefetch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.427">isAsyncPrefetch</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.409">isAsyncPrefetch</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isAsyncPrefetch--">isAsyncPrefetch</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2147,7 +2053,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLimit</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.432">getLimit</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.414">getLimit</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getLimit--">getLimit</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2162,7 +2068,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.437">getReadType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.419">getReadType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getReadType--">getReadType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2177,7 +2083,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMvccReadPoint</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.442">getMvccReadPoint</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.424">getMvccReadPoint</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMvccReadPoint--">Scan</a></code></span></div>
 <div class="block">Get the mvcc read point used to open a scanner.</div>
 <dl>
@@ -2192,7 +2098,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isNeedCursorResult</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.447">isNeedCursorResult</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.429">isNeedCursorResult</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isNeedCursorResult--">isNeedCursorResult</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2205,7 +2111,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAttribute</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.452">getAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.434">getAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#getAttribute-java.lang.String-">Attributes</a></code></span></div>
 <div class="block">Gets an attribute</div>
 <dl>
@@ -2226,7 +2132,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConsistency</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.458">getConsistency</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.440">getConsistency</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getConsistency--">Query</a></code></span></div>
 <div class="block">Returns the consistency level for this operation</div>
 <dl>
@@ -2243,7 +2149,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAttributeSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.463">getAttributeSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.445">getAttributeSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#getAttributeSize--">getAttributeSize</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html" title="class in org.apache.hadoop.hbase.client">OperationWithAttributes</a></code></dd>
@@ -2256,7 +2162,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAttributesMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.468">getAttributesMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.450">getAttributesMap</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#getAttributesMap--">Attributes</a></code></span></div>
 <div class="block">Gets all attributes</div>
 <dl>
@@ -2275,7 +2181,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadColumnFamiliesOnDemandValue</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.473">getLoadColumnFamiliesOnDemandValue</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.455">getLoadColumnFamiliesOnDemandValue</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getLoadColumnFamiliesOnDemandValue--">Query</a></code></span></div>
 <div class="block">Get the raw loadColumnFamiliesOnDemand setting; if it's not set, can be null.</div>
 <dl>
@@ -2290,7 +2196,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.478">getPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.460">getPriority</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#getPriority--">getPriority</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html" title="class in org.apache.hadoop.hbase.client">OperationWithAttributes</a></code></dd>
@@ -2303,7 +2209,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamilyTimeRange</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.483">getColumnFamilyTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.465">getColumnFamilyTimeRange</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getColumnFamilyTimeRange--">getColumnFamilyTimeRange</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -2318,7 +2224,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicaId</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.488">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.470">getReplicaId</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getReplicaId--">Query</a></code></span></div>
 <div class="block">Returns region replica id where Query will fetch data from.</div>
 <dl>
@@ -2335,7 +2241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>doLoadColumnFamiliesOnDemand</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.493">doLoadColumnFamiliesOnDemand</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.475">doLoadColumnFamiliesOnDemand</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#doLoadColumnFamiliesOnDemand--">Query</a></code></span></div>
 <div class="block">Get the logical value indicating whether on-demand CF loading should be allowed.</div>
 <dl>
@@ -2350,7 +2256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getId</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.498">getId</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.480">getId</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#getId--">OperationWithAttributes</a></code></span></div>
 <div class="block">This method allows you to retrieve the identifier for the operation if one
  was set.</div>
@@ -2368,7 +2274,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isGetScan</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.503">isGetScan</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.485">isGetScan</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isGetScan--">isGetScan</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></dd>
@@ -2381,7 +2287,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getIsolationLevel</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.508">getIsolationLevel</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.490">getIsolationLevel</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getIsolationLevel--">getIsolationLevel</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -2398,7 +2304,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthorizations</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.513">getAuthorizations</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.495">getAuthorizations</a>()
                                  throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -2416,7 +2322,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.518">toString</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.500">toString</a>(int&nbsp;maxCols)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toString-int-">Operation</a></code></span></div>
 <div class="block">Produces a string representation of this Operation. It defaults to a JSON
  representation, but falls back to a string representation of the 
@@ -2438,7 +2344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.523">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.505">toString</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toString--">Operation</a></code></span></div>
 <div class="block">Produces a string representation of this Operation. It defaults to a JSON
  representation, but falls back to a string representation of the
@@ -2457,7 +2363,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.528">toMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.510">toMap</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toMap--">Operation</a></code></span></div>
 <div class="block">Produces a Map containing a full summary of a query.</div>
 <dl>
@@ -2474,7 +2380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toJSON</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.533">toJSON</a>(int&nbsp;maxCols)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.515">toJSON</a>(int&nbsp;maxCols)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toJSON-int-">Operation</a></code></span></div>
 <div class="block">Produces a JSON object for fingerprint and details exposure in a
@@ -2497,7 +2403,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toJSON</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.538">toJSON</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ImmutableScan.html#line.520">toJSON</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toJSON--">Operation</a></code></span></div>
 <div class="block">Produces a JSON object sufficient for description of a query
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html b/devapidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
index b239721..dcac137 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -123,7 +123,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1022">Scan.ReadType</a>
+public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.953">Scan.ReadType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&gt;</pre>
 </li>
 </ul>
@@ -214,7 +214,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">DEFAULT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">DEFAULT</a></pre>
 </li>
 </ul>
 <a name="STREAM">
@@ -223,7 +223,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STREAM</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">STREAM</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">STREAM</a></pre>
 </li>
 </ul>
 <a name="PREAD">
@@ -232,7 +232,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PREAD</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.1023">PREAD</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.954">PREAD</a></pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Scan.html b/devapidocs/org/apache/hadoop/hbase/client/Scan.html
index 9f66758..aee3cb9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Scan.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Scan.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":42,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":42,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":42,"i65":10,"i66":42,"i67":10,"i68":10,"i69":42,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10};
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":42,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":42,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -312,32 +312,22 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#SCAN_ATTRIBUTES_TABLE_NAME">SCAN_ATTRIBUTES_TABLE_NAME</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#small">small</a></span></code>
-<div class="block">Set it true for small scan to get better performance Small scan should use pread and big scan
- can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)
- cause too much network io [89-fb] Using pread for non-compaction read request
- https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we
- would do openScanner,next,closeScanner in one RPC call.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#startRow">startRow</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#stopRow">stopRow</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#storeLimit">storeLimit</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#storeOffset">storeOffset</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#tr">tr</a></span></code>&nbsp;</td>
 </tr>
@@ -544,53 +534,44 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i31" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall</a></span>()</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>setSmall(boolean)</code></a></span></div>
-</div>
-</td>
-</tr>
-<tr id="i32" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#numFamilies--">numFamilies</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--">readAllVersions</a></span>()</code>
 <div class="block">Get all available versions.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-">readVersions</a></span>(int&nbsp;versions)</code>
 <div class="block">Get up to the specified number of versions of each column.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#resetMvccReadPoint--">resetMvccReadPoint</a></span>()</code>
 <div class="block">Set the mvcc read point to -1 which means do not use it.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.util.Map-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">setACL</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
       <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-">setAllowPartialResults</a></span>(boolean&nbsp;allowPartialResults)</code>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">setAsyncPrefetch</a></span>(boolean&nbsp;asyncPrefetch)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -599,38 +580,38 @@
 </div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAttribute-java.lang.String-byte:A-">setAttribute</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
             byte[]&nbsp;value)</code>
 <div class="block">Sets an attribute.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">setAuthorizations</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</code>
 <div class="block">Sets the authorizations to be used by this Query</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setBatch-int-">setBatch</a></span>(int&nbsp;batch)</code>
 <div class="block">Set the maximum number of cells to return for each call to next().</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCacheBlocks-boolean-">setCacheBlocks</a></span>(boolean&nbsp;cacheBlocks)</code>
 <div class="block">Set whether blocks should be cached for this Scan.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCaching-int-">setCaching</a></span>(int&nbsp;caching)</code>
 <div class="block">Set the number of rows for caching that will be passed to scanners.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setColumnFamilyTimeRange-byte:A-long-long-">setColumnFamilyTimeRange</a></span>(byte[]&nbsp;cf,
                         long&nbsp;minStamp,
@@ -639,115 +620,115 @@
  [minStamp, maxStamp) on a per CF bases.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">setConsistency</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</code>
 <div class="block">Sets the consistency level for this operation</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFamilyMap-java.util.Map-">setFamilyMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</code>
 <div class="block">Setting the familyMap</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">setFilter</a></span>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</code>
 <div class="block">Apply the specified server-side filter when performing the Query.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setId-java.lang.String-">setId</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</code>
 <div class="block">This method allows you to set an identifier on an operation.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">setIsolationLevel</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</code>
 <div class="block">Set the isolation level for this query.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-">setLimit</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the limit of rows for this scan.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLoadColumnFamiliesOnDemand-boolean-">setLoadColumnFamiliesOnDemand</a></span>(boolean&nbsp;value)</code>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false).</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-">setMaxResultSize</a></span>(long&nbsp;maxResultSize)</code>
 <div class="block">Set the maximum result size.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultsPerColumnFamily-int-">setMaxResultsPerColumnFamily</a></span>(int&nbsp;limit)</code>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMvccReadPoint-long-">setMvccReadPoint</a></span>(long&nbsp;mvccReadPoint)</code>
 <div class="block">Set the mvcc read point used to open a scanner.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setNeedCursorResult-boolean-">setNeedCursorResult</a></span>(boolean&nbsp;needCursorResult)</code>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setOneRowLimit--">setOneRowLimit</a></span>()</code>
 <div class="block">Call this when you only want to get one row.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setPriority-int-">setPriority</a></span>(int&nbsp;priority)</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRaw-boolean-">setRaw</a></span>(boolean&nbsp;raw)</code>
 <div class="block">Enable/disable "raw" mode for this scan.</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">setReadType</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</code>
 <div class="block">Set the read type for this scan.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReplicaId-int-">setReplicaId</a></span>(int&nbsp;Id)</code>
 <div class="block">Specify region replica id where Query will fetch data from.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReversed-boolean-">setReversed</a></span>(boolean&nbsp;reversed)</code>
 <div class="block">Set whether this scan is a reversed one</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowOffsetPerColumnFamily-int-">setRowOffsetPerColumnFamily</a></span>(int&nbsp;offset)</code>
 <div class="block">Set offset for the row per Column Family.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">setRowPrefixFilter</a></span>(byte[]&nbsp;rowPrefix)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -759,24 +740,13 @@
 </div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setScanMetricsEnabled-boolean-">setScanMetricsEnabled</a></span>(boolean&nbsp;enabled)</code>
 <div class="block">Enable collection of <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a>.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</td>
-</tr>
-<tr id="i67" class="rowColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a></span>(long&nbsp;minStamp,
             long&nbsp;maxStamp)</code>
@@ -784,48 +754,39 @@
  [minStamp, maxStamp).</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp</a></span>(long&nbsp;timestamp)</code>
 <div class="block">Get versions of columns with the specified timestamp.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-</div>
-</td>
-</tr>
-<tr id="i70" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#toMap-int-">toMap</a></span>(int&nbsp;maxCols)</code>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a></span>(byte[]&nbsp;startRow)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-boolean-">withStartRow</a></span>(byte[]&nbsp;startRow,
             boolean&nbsp;inclusive)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-">withStopRow</a></span>(byte[]&nbsp;stopRow)</code>
 <div class="block">Set the stop row of the scan.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-boolean-">withStopRow</a></span>(byte[]&nbsp;stopRow,
            boolean&nbsp;inclusive)</code>
@@ -1109,29 +1070,13 @@
 </dl>
 </li>
 </ul>
-<a name="small">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>small</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.156">small</a></pre>
-<div class="block">Set it true for small scan to get better performance Small scan should use pread and big scan
- can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)
- cause too much network io [89-fb] Using pread for non-compaction read request
- https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we
- would do openScanner,next,closeScanner in one RPC call. It means the better performance for
- small scan. [HBASE-9488]. Generally, if the scan range is within one data block(64KB), it could
- be considered as a small scan.</div>
-</li>
-</ul>
 <a name="mvccReadPoint">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>mvccReadPoint</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.162">mvccReadPoint</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.151">mvccReadPoint</a></pre>
 <div class="block">The mvcc read point to use when open a scanner. Remember to clear it after switching regions as
  the mvcc is only valid within region scope.</div>
 </li>
@@ -1142,7 +1087,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>limit</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.168">limit</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.157">limit</a></pre>
 <div class="block">The number of rows we want for this scan. We will terminate the scan if the number of return
  rows reaches this value.</div>
 </li>
@@ -1153,7 +1098,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readType</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.173">readType</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.162">readType</a></pre>
 <div class="block">Control whether to use pread at server side.</div>
 </li>
 </ul>
@@ -1163,7 +1108,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>needCursorResult</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.175">needCursorResult</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.164">needCursorResult</a></pre>
 </li>
 </ul>
 </li>
@@ -1180,7 +1125,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.180">Scan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.169">Scan</a>()</pre>
 <div class="block">Create a Scan operation across all rows.</div>
 </li>
 </ul>
@@ -1190,7 +1135,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.188">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.177">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a new instance of this class while copying all values.</div>
 <dl>
@@ -1207,7 +1152,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Scan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.240">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.228">Scan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)</pre>
 <div class="block">Builds a scan object with the same specs as get.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1229,7 +1174,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isGetScan</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.268">isGetScan</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.256">isGetScan</a>()</pre>
 </li>
 </ul>
 <a name="addFamily-byte:A-">
@@ -1238,7 +1183,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.280">addFamily</a>(byte[]&nbsp;family)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.268">addFamily</a>(byte[]&nbsp;family)</pre>
 <div class="block">Get all columns from the specified family.
  <p>
  Overrides previous calls to addColumn for this family.</div>
@@ -1256,7 +1201,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.294">addColumn</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.282">addColumn</a>(byte[]&nbsp;family,
                       byte[]&nbsp;qualifier)</pre>
 <div class="block">Get the column from the specified family with the specified qualifier.
  <p>
@@ -1276,7 +1221,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.318">setTimeRange</a>(long&nbsp;minStamp,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.306">setTimeRange</a>(long&nbsp;minStamp,
                          long&nbsp;maxStamp)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get versions of columns only within the specified timestamp range,
@@ -1297,41 +1242,13 @@
 </dl>
 </li>
 </ul>
-<a name="setTimeStamp-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setTimeStamp</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.336">setTimeStamp</a>(long&nbsp;timestamp)
-                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-<div class="block">Get versions of columns with the specified timestamp. Note, default maximum
- versions to return is 1.  If your time range spans more than one version
- and you want all versions returned, up the number of versions beyond the
- defaut.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>timestamp</code> - version timestamp</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>this</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--"><code>readAllVersions()</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-"><code>readVersions(int)</code></a></dd>
-</dl>
-</li>
-</ul>
 <a name="setTimestamp-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimestamp</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.351">setTimestamp</a>(long&nbsp;timestamp)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.321">setTimestamp</a>(long&nbsp;timestamp)</pre>
 <div class="block">Get versions of columns with the specified timestamp. Note, default maximum
  versions to return is 1.  If your time range spans more than one version
  and you want all versions returned, up the number of versions beyond the
@@ -1353,7 +1270,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setColumnFamilyTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.363">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.333">setColumnFamilyTimeRange</a>(byte[]&nbsp;cf,
                                      long&nbsp;minStamp,
                                      long&nbsp;maxStamp)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setColumnFamilyTimeRange-byte:A-long-long-">Query</a></code></span></div>
@@ -1380,7 +1297,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.377">withStartRow</a>(byte[]&nbsp;startRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.347">withStartRow</a>(byte[]&nbsp;startRow)</pre>
 <div class="block">Set the start row of the scan.
  <p>
  If the specified row does not exist, the Scanner will start from the next closest row after the
@@ -1402,7 +1319,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStartRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.395">withStartRow</a>(byte[]&nbsp;startRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.365">withStartRow</a>(byte[]&nbsp;startRow,
                          boolean&nbsp;inclusive)</pre>
 <div class="block">Set the start row of the scan.
  <p>
@@ -1429,7 +1346,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.418">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.388">withStopRow</a>(byte[]&nbsp;stopRow)</pre>
 <div class="block">Set the stop row of the scan.
  <p>
  The scan will include rows that are lexicographically less than the provided stopRow.
@@ -1454,7 +1371,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>withStopRow</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.433">withStopRow</a>(byte[]&nbsp;stopRow,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.403">withStopRow</a>(byte[]&nbsp;stopRow,
                         boolean&nbsp;inclusive)</pre>
 <div class="block">Set the stop row of the scan.
  <p>
@@ -1479,7 +1396,7 @@
 <li class="blockList">
 <h4>setRowPrefixFilter</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.460">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.430">setRowPrefixFilter</a>(byte[]&nbsp;rowPrefix)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 3.0.0. The scan result might be unexpected in some cases.
    e.g. startRow : "112" and rowPrefixFilter : "11"
    The Result of this scan might contains : "111"
@@ -1506,7 +1423,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readAllVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.475">readAllVersions</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.445">readAllVersions</a>()</pre>
 <div class="block">Get all available versions.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1520,7 +1437,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readVersions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.485">readVersions</a>(int&nbsp;versions)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.455">readVersions</a>(int&nbsp;versions)</pre>
 <div class="block">Get up to the specified number of versions of each column.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1536,7 +1453,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatch</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.499">setBatch</a>(int&nbsp;batch)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.469">setBatch</a>(int&nbsp;batch)</pre>
 <div class="block">Set the maximum number of cells to return for each call to next(). Callers should be aware
  that this is not equivalent to calling <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-"><code>setAllowPartialResults(boolean)</code></a>.
  If you don't allow partial results, the number of cells in each Result must equal to your
@@ -1556,7 +1473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.513">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.483">setMaxResultsPerColumnFamily</a>(int&nbsp;limit)</pre>
 <div class="block">Set the maximum number of values to return per row per Column Family</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1570,7 +1487,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.522">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.492">setRowOffsetPerColumnFamily</a>(int&nbsp;offset)</pre>
 <div class="block">Set offset for the row per Column Family.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1584,7 +1501,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCaching</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.534">setCaching</a>(int&nbsp;caching)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.504">setCaching</a>(int&nbsp;caching)</pre>
 <div class="block">Set the number of rows for caching that will be passed to scanners.
  If not set, the Configuration setting <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#HBASE_CLIENT_SCANNER_CACHING"><code>HConstants.HBASE_CLIENT_SCANNER_CACHING</code></a> will
  apply.
@@ -1601,7 +1518,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.542">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.512">getMaxResultSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the maximum result size in bytes. See <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-"><code>setMaxResultSize(long)</code></a></dd>
@@ -1614,7 +1531,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxResultSize</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.553">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.523">setMaxResultSize</a>(long&nbsp;maxResultSize)</pre>
 <div class="block">Set the maximum result size. The default is -1; this means that no specific
  maximum result size will be set for this scan, and the global configured
  value will be used instead. (Defaults to unlimited).</div>
@@ -1630,7 +1547,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.559">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.529">setFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;filter)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">Query</a></code></span></div>
 <div class="block">Apply the specified server-side filter when performing the Query. Only
  <a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html#filterCell-org.apache.hadoop.hbase.Cell-"><code>Filter.filterCell(org.apache.hadoop.hbase.Cell)</code></a> is called AFTER all tests for ttl,
@@ -1651,7 +1568,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.569">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.539">setFamilyMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</pre>
 <div class="block">Setting the familyMap</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1667,7 +1584,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.578">getFamilyMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.548">getFamilyMap</a>()</pre>
 <div class="block">Getting the familyMap</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1681,7 +1598,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.585">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.555">numFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of families in familyMap</dd>
@@ -1694,7 +1611,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamilies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.595">hasFamilies</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.565">hasFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if familyMap is non empty, false otherwise</dd>
@@ -1707,7 +1624,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilies</h4>
-<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.602">getFamilies</a>()</pre>
+<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.572">getFamilies</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the keys of the familyMap</dd>
@@ -1720,7 +1637,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.612">getStartRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.582">getStartRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the startrow</dd>
@@ -1733,7 +1650,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStartRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.619">includeStartRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.589">includeStartRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>if we should include start row when scan</dd>
@@ -1746,7 +1663,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStopRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.626">getStopRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.596">getStopRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the stoprow</dd>
@@ -1759,7 +1676,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStopRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.633">includeStopRow</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.603">includeStopRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>if we should include stop row when scan</dd>
@@ -1772,7 +1689,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxVersions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.640">getMaxVersions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.610">getMaxVersions</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the max number of versions to fetch</dd>
@@ -1785,7 +1702,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.647">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.617">getBatch</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>maximum number of values to return for a single call to next()</dd>
@@ -1798,7 +1715,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultsPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.654">getMaxResultsPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.624">getMaxResultsPerColumnFamily</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>maximum number of values to return per row per CF</dd>
@@ -1811,7 +1728,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowOffsetPerColumnFamily</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.663">getRowOffsetPerColumnFamily</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.633">getRowOffsetPerColumnFamily</a>()</pre>
 <div class="block">Method for retrieving the scan's offset per row per column
  family (#kvs to be skipped)</div>
 <dl>
@@ -1826,7 +1743,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaching</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.670">getCaching</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.640">getCaching</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>caching the number of rows fetched when calling next on a scanner</dd>
@@ -1839,7 +1756,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.677">getTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.647">getTimeRange</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>TimeRange</dd>
@@ -1852,7 +1769,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.685">getFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.655">getFilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#getFilter--">getFilter</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -1867,7 +1784,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.692">hasFilter</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.662">hasFilter</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true is a filter has been specified, false if not</dd>
@@ -1880,7 +1797,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setCacheBlocks</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.706">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.676">setCacheBlocks</a>(boolean&nbsp;cacheBlocks)</pre>
 <div class="block">Set whether blocks should be cached for this Scan.
  <p>
  This is true by default.  When true, default settings of the table and
@@ -1899,7 +1816,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheBlocks</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.716">getCacheBlocks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.686">getCacheBlocks</a>()</pre>
 <div class="block">Get whether blocks should be cached for this Scan.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1914,7 +1831,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReversed</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.728">setReversed</a>(boolean&nbsp;reversed)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.698">setReversed</a>(boolean&nbsp;reversed)</pre>
 <div class="block">Set whether this scan is a reversed one
  <p>
  This is false by default which means forward(normal) scan.</div>
@@ -1932,7 +1849,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReversed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.737">isReversed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.707">isReversed</a>()</pre>
 <div class="block">Get whether this scan is a reversed one.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1946,7 +1863,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAllowPartialResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.751">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.721">setAllowPartialResults</a>(boolean&nbsp;allowPartialResults)</pre>
 <div class="block">Setting whether the caller wants to see the partial results when server returns
  less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.
  By default this value is false and the complete results will be assembled client side
@@ -1968,7 +1885,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllowPartialResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.761">getAllowPartialResults</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.731">getAllowPartialResults</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the constructor of this scan understands that the results they will see may
@@ -1983,7 +1900,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLoadColumnFamiliesOnDemand</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.766">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.736">setLoadColumnFamiliesOnDemand</a>(boolean&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setLoadColumnFamiliesOnDemand-boolean-">Query</a></code></span></div>
 <div class="block">Set the value indicating whether loading CFs on demand should be allowed (cluster
  default is false). On-demand CF loading doesn't load column families until necessary, e.g.
@@ -2011,7 +1928,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFingerprint</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.777">getFingerprint</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.747">getFingerprint</a>()</pre>
 <div class="block">Compile the table and column family (i.e. schema) information
  into a String. Useful for parsing and aggregation by debugging,
  logging, and administration tools.</div>
@@ -2029,7 +1946,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.801">toMap</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.771">toMap</a>(int&nbsp;maxCols)</pre>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.
  Useful for debugging, logging, and administration tools.</div>
@@ -2049,7 +1966,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setRaw</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.864">setRaw</a>(boolean&nbsp;raw)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.834">setRaw</a>(boolean&nbsp;raw)</pre>
 <div class="block">Enable/disable "raw" mode for this scan.
  If "raw" is enabled the scan will return all
  delete marker and deleted rows that have not
@@ -2069,69 +1986,20 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.872">isRaw</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.842">isRaw</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if this Scan is in "raw" mode.</dd>
 </dl>
 </li>
 </ul>
-<a name="setSmall-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.896">setSmall</a>(boolean&nbsp;small)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-<div class="block">Set whether this scan is a small scan
- <p>
- Small scan should use pread and big scan can use seek + read seek + read is fast but can cause
- two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for
- non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,
- if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the
- better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one
- data block(64KB), it could be considered as a small scan.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>small</code> - </dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a>, 
-<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a>, 
-<a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
-<a name="isSmall--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isSmall</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.912">isSmall</a>()</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. See the comment of
-   <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>setSmall(boolean)</code></a></span></div>
-<div class="block">Get whether this scan is a small scan</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if small scan</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="https://issues.apache.org/jira/browse/HBASE-17045">HBASE-17045</a></dd>
-</dl>
-</li>
-</ul>
 <a name="setAttribute-java.lang.String-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.917">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.848">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                          byte[]&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute-java.lang.String-byte:A-">Attributes</a></code></span></div>
 <div class="block">Sets an attribute.
@@ -2154,7 +2022,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.922">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.853">setId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId-java.lang.String-">OperationWithAttributes</a></code></span></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -2175,7 +2043,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAuthorizations</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.927">setAuthorizations</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.858">setAuthorizations</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a>&nbsp;authorizations)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">Query</a></code></span></div>
 <div class="block">Sets the authorizations to be used by this Query</div>
 <dl>
@@ -2190,7 +2058,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.932">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.863">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setACL-java.util.Map-">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></code></dd>
@@ -2205,7 +2073,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.937">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.868">setACL</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                    <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -2222,7 +2090,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setConsistency</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.942">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.873">setConsistency</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;consistency)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">Query</a></code></span></div>
 <div class="block">Sets the consistency level for this operation</div>
 <dl>
@@ -2239,7 +2107,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicaId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.947">setReplicaId</a>(int&nbsp;Id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.878">setReplicaId</a>(int&nbsp;Id)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setReplicaId-int-">Query</a></code></span></div>
 <div class="block">Specify region replica id where Query will fetch data from. Use this together with
  <a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-"><code>Query.setConsistency(Consistency)</code></a> passing <a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html#TIMELINE"><code>Consistency.TIMELINE</code></a> to read data from
@@ -2257,7 +2125,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setIsolationLevel</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.952">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.883">setIsolationLevel</a>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;level)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Query.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">Query</a></code></span></div>
 <div class="block">Set the isolation level for this query. If the
  isolation level is set to READ_UNCOMMITTED, then
@@ -2281,7 +2149,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.957">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.888">setPriority</a>(int&nbsp;priority)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setPriority-int-">setPriority</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html" title="class in org.apache.hadoop.hbase.client">OperationWithAttributes</a></code></dd>
@@ -2294,7 +2162,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setScanMetricsEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.965">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.896">setScanMetricsEnabled</a>(boolean&nbsp;enabled)</pre>
 <div class="block">Enable collection of <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a>. For advanced users.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2308,7 +2176,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isScanMetricsEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.973">isScanMetricsEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.904">isScanMetricsEnabled</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if collection of scan metrics is enabled. For advanced users.</dd>
@@ -2321,7 +2189,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isAsyncPrefetch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.978">isAsyncPrefetch</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.909">isAsyncPrefetch</a>()</pre>
 </li>
 </ul>
 <a name="setAsyncPrefetch-boolean-">
@@ -2331,7 +2199,7 @@
 <li class="blockList">
 <h4>setAsyncPrefetch</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.987">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.918">setAsyncPrefetch</a>(boolean&nbsp;asyncPrefetch)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. After building sync client upon async
              client, the implementation is always 'async prefetch', so this flag is useless now.</span></div>
 </li>
@@ -2342,7 +2210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLimit</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.995">getLimit</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.926">getLimit</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the limit of rows for this scan</dd>
@@ -2355,7 +2223,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1007">setLimit</a>(int&nbsp;limit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.938">setLimit</a>(int&nbsp;limit)</pre>
 <div class="block">Set the limit of rows for this scan. We will terminate the scan if the number of returned rows
  reaches this value.
  <p>
@@ -2374,7 +2242,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setOneRowLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1017">setOneRowLimit</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.948">setOneRowLimit</a>()</pre>
 <div class="block">Call this when you only want to get one row. It will set <code>limit</code> to <code>1</code>, and also
  set <code>readType</code> to <a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html#PREAD"><code>Scan.ReadType.PREAD</code></a>.</div>
 <dl>
@@ -2389,7 +2257,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1029">getReadType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.960">getReadType</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the read type for this scan</dd>
@@ -2402,7 +2270,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1040">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.971">setReadType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;readType)</pre>
 <div class="block">Set the read type for this scan.
  <p>
  Notice that we may choose to use pread even if you specific <a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html#STREAM"><code>Scan.ReadType.STREAM</code></a> here. For
@@ -2419,7 +2287,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMvccReadPoint</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1048">getMvccReadPoint</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.979">getMvccReadPoint</a>()</pre>
 <div class="block">Get the mvcc read point used to open a scanner.</div>
 </li>
 </ul>
@@ -2429,7 +2297,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMvccReadPoint</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1055">setMvccReadPoint</a>(long&nbsp;mvccReadPoint)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.986">setMvccReadPoint</a>(long&nbsp;mvccReadPoint)</pre>
 <div class="block">Set the mvcc read point used to open a scanner.</div>
 </li>
 </ul>
@@ -2439,7 +2307,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>resetMvccReadPoint</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1063">resetMvccReadPoint</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.994">resetMvccReadPoint</a>()</pre>
 <div class="block">Set the mvcc read point to -1 which means do not use it.</div>
 </li>
 </ul>
@@ -2449,7 +2317,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setNeedCursorResult</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1086">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1017">setNeedCursorResult</a>(boolean&nbsp;needCursorResult)</pre>
 <div class="block">When the server is slow or we scan a table with many deleted data or we use a sparse filter,
  the server will response heartbeat to prevent timeout. However the scanner will return a Result
  only when client can do it. So if there are many heartbeats, the blocking time on
@@ -2475,7 +2343,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isNeedCursorResult</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1091">isNeedCursorResult</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1022">isNeedCursorResult</a>()</pre>
 </li>
 </ul>
 <a name="createScanFromCursor-org.apache.hadoop.hbase.client.Cursor-">
@@ -2484,7 +2352,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createScanFromCursor</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1102">createScanFromCursor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&nbsp;cursor)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.1033">createScanFromCursor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&nbsp;cursor)</pre>
 <div class="block">Create a new Scan with a cursor. It only set the position information like start row key.
  The others (like cfs, stop row, limit) should still be filled in by the user.
  <a href="../../../../../org/apache/hadoop/hbase/client/Result.html#isCursor--"><code>Result.isCursor()</code></a>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
index 44aef81..2861eac 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
@@ -688,23 +688,6 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>setLimit(int)</code></a> and
-   <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
-   fetch data when openScanner, and if the number of rows reaches the limit then we will close
-   the scanner automatically which means we will fall back to one rpc.</span></div>
-</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ImmutableScan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setSmall-boolean-">setSmall</a></span>(boolean&nbsp;small)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a></span>(long&nbsp;minStamp,
             long&nbsp;maxStamp)</code>
 <div class="block">Get versions of columns only within the specified timestamp range,
@@ -728,21 +711,6 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
-             Use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>setTimestamp(long)</code></a> instead</span></div>
-</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ImmutableScan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeStamp-long-">setTimeStamp</a></span>(long&nbsp;timestamp)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a></span>(byte[]&nbsp;startRow)</code>
 <div class="block">Set the start row of the scan.</div>
 </td>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index ccf6e6a..f729fb0 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -455,24 +455,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index ff00c24..4ab4bc0 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -176,8 +176,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 6f27408..2d4c0dd 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
index 68f0de9..d3337ce 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
@@ -107,8 +107,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/Color.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">Color</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index 244636e..5a8b38c 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -140,9 +140,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
index 9475d5b..1ce5aaf 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
@@ -118,7 +118,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.161">CombinedBlockCache.CombinedCacheStats</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.166">CombinedBlockCache.CombinedCacheStats</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></pre>
 </li>
 </ul>
@@ -377,7 +377,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>lruCacheStats</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.162">lruCacheStats</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.167">lruCacheStats</a></pre>
 </li>
 </ul>
 <a name="bucketCacheStats">
@@ -386,7 +386,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>bucketCacheStats</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.163">bucketCacheStats</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.168">bucketCacheStats</a></pre>
 </li>
 </ul>
 </li>
@@ -403,7 +403,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CombinedCacheStats</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.165">CombinedCacheStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;lbcStats,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.170">CombinedCacheStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;lbcStats,
                    <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;fcStats)</pre>
 </li>
 </ul>
@@ -421,7 +421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLruCacheStats</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.171">getLruCacheStats</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.176">getLruCacheStats</a>()</pre>
 </li>
 </ul>
 <a name="getBucketCacheStats--">
@@ -430,7 +430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBucketCacheStats</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.175">getBucketCacheStats</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.180">getBucketCacheStats</a>()</pre>
 </li>
 </ul>
 <a name="getDataMissCount--">
@@ -439,7 +439,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.180">getDataMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.185">getDataMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getDataMissCount--">getDataMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -452,7 +452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeafIndexMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.185">getLeafIndexMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.190">getLeafIndexMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getLeafIndexMissCount--">getLeafIndexMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -465,7 +465,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBloomChunkMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.190">getBloomChunkMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.195">getBloomChunkMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getBloomChunkMissCount--">getBloomChunkMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -478,7 +478,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.195">getMetaMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.200">getMetaMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMetaMissCount--">getMetaMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -491,7 +491,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootIndexMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.200">getRootIndexMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.205">getRootIndexMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getRootIndexMissCount--">getRootIndexMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -504,7 +504,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getIntermediateIndexMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.205">getIntermediateIndexMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.210">getIntermediateIndexMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getIntermediateIndexMissCount--">getIntermediateIndexMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -517,7 +517,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileInfoMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.211">getFileInfoMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.216">getFileInfoMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFileInfoMissCount--">getFileInfoMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -530,7 +530,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getGeneralBloomMetaMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.216">getGeneralBloomMetaMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.221">getGeneralBloomMetaMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getGeneralBloomMetaMissCount--">getGeneralBloomMetaMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -543,7 +543,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeleteFamilyBloomMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.222">getDeleteFamilyBloomMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.227">getDeleteFamilyBloomMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getDeleteFamilyBloomMissCount--">getDeleteFamilyBloomMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -556,7 +556,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTrailerMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.228">getTrailerMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.233">getTrailerMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getTrailerMissCount--">getTrailerMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -569,7 +569,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.233">getDataHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.238">getDataHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getDataHitCount--">getDataHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -582,7 +582,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeafIndexHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.238">getLeafIndexHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.243">getLeafIndexHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getLeafIndexHitCount--">getLeafIndexHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -595,7 +595,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBloomChunkHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.243">getBloomChunkHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.248">getBloomChunkHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getBloomChunkHitCount--">getBloomChunkHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -608,7 +608,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.248">getMetaHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.253">getMetaHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMetaHitCount--">getMetaHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -621,7 +621,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootIndexHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.253">getRootIndexHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.258">getRootIndexHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getRootIndexHitCount--">getRootIndexHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -634,7 +634,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getIntermediateIndexHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.258">getIntermediateIndexHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.263">getIntermediateIndexHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getIntermediateIndexHitCount--">getIntermediateIndexHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -647,7 +647,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileInfoHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.264">getFileInfoHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.269">getFileInfoHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFileInfoHitCount--">getFileInfoHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -660,7 +660,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getGeneralBloomMetaHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.269">getGeneralBloomMetaHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.274">getGeneralBloomMetaHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getGeneralBloomMetaHitCount--">getGeneralBloomMetaHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -673,7 +673,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeleteFamilyBloomHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.275">getDeleteFamilyBloomHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.280">getDeleteFamilyBloomHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getDeleteFamilyBloomHitCount--">getDeleteFamilyBloomHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -686,7 +686,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTrailerHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.281">getTrailerHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.286">getTrailerHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getTrailerHitCount--">getTrailerHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -699,7 +699,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.286">getRequestCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.291">getRequestCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getRequestCount--">getRequestCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -712,7 +712,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestCachingCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.292">getRequestCachingCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.297">getRequestCachingCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getRequestCachingCount--">getRequestCachingCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -725,7 +725,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.298">getMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.303">getMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMissCount--">getMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -738,7 +738,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrimaryMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.303">getPrimaryMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.308">getPrimaryMissCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getPrimaryMissCount--">getPrimaryMissCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -751,7 +751,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMissCachingCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.308">getMissCachingCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.313">getMissCachingCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMissCachingCount--">getMissCachingCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -764,7 +764,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.314">getHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.319">getHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCount--">getHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -777,7 +777,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrimaryHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.319">getPrimaryHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.324">getPrimaryHitCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getPrimaryHitCount--">getPrimaryHitCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -790,7 +790,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHitCachingCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.323">getHitCachingCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.328">getHitCachingCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingCount--">getHitCachingCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -803,7 +803,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEvictionCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.329">getEvictionCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.334">getEvictionCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getEvictionCount--">getEvictionCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -816,7 +816,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEvictedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.335">getEvictedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.340">getEvictedCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getEvictedCount--">getEvictedCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -829,7 +829,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrimaryEvictedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.341">getPrimaryEvictedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.346">getPrimaryEvictedCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getPrimaryEvictedCount--">getPrimaryEvictedCount</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -842,7 +842,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rollMetricsPeriod</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.347">rollMetricsPeriod</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.352">rollMetricsPeriod</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#rollMetricsPeriod--">rollMetricsPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -855,7 +855,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFailedInserts</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.353">getFailedInserts</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.358">getFailedInserts</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFailedInserts--">getFailedInserts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -868,7 +868,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSumHitCountsPastNPeriods</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.358">getSumHitCountsPastNPeriods</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.363">getSumHitCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCountsPastNPeriods--">getSumHitCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -881,7 +881,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSumRequestCountsPastNPeriods</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.364">getSumRequestCountsPastNPeriods</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.369">getSumRequestCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCountsPastNPeriods--">getSumRequestCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -894,7 +894,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSumHitCachingCountsPastNPeriods</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.370">getSumHitCachingCountsPastNPeriods</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.375">getSumHitCachingCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCachingCountsPastNPeriods--">getSumHitCachingCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
@@ -907,7 +907,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSumRequestCachingCountsPastNPeriods</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.376">getSumRequestCachingCountsPastNPeriods</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.381">getSumRequestCachingCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCachingCountsPastNPeriods--">getSumRequestCachingCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
index 2766c51..7e67135 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
@@ -519,7 +519,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlock</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.91">getBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.96">getBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                           boolean&nbsp;caching,
                           boolean&nbsp;repeat,
                           boolean&nbsp;updateCacheMetrics,
@@ -547,7 +547,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>evictBlock</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.105">evictBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.110">evictBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#evictBlock-org.apache.hadoop.hbase.io.hfile.BlockCacheKey-">BlockCache</a></code></span></div>
 <div class="block">Evict block from cache.</div>
 <dl>
@@ -566,7 +566,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>evictBlocksByHfileName</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.110">evictBlocksByHfileName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileName)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.115">evictBlocksByHfileName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#evictBlocksByHfileName-java.lang.String-">BlockCache</a></code></span></div>
 <div class="block">Evicts all blocks for the given HFile.</div>
 <dl>
@@ -583,7 +583,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStats</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.116">getStats</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.121">getStats</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getStats--">BlockCache</a></code></span></div>
 <div class="block">Get the statistics for this block cache.</div>
 <dl>
@@ -600,7 +600,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.121">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.126">shutdown</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#shutdown--">BlockCache</a></code></span></div>
 <div class="block">Shutdown the cache.</div>
 <dl>
@@ -615,7 +615,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.127">size</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.132">size</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#size--">BlockCache</a></code></span></div>
 <div class="block">Returns the total size of the block cache, in bytes.</div>
 <dl>
@@ -632,7 +632,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.132">getMaxSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.137">getMaxSize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getMaxSize--">BlockCache</a></code></span></div>
 <div class="block">Returns the Max size of the block cache, in bytes.</div>
 <dl>
@@ -649,7 +649,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentDataSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.137">getCurrentDataSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.142">getCurrentDataSize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getCurrentDataSize--">BlockCache</a></code></span></div>
 <div class="block">Returns the occupied size of data blocks, in bytes.</div>
 <dl>
@@ -666,7 +666,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFreeSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.142">getFreeSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.147">getFreeSize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getFreeSize--">BlockCache</a></code></span></div>
 <div class="block">Returns the free size of the block cache, in bytes.</div>
 <dl>
@@ -683,7 +683,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.147">getCurrentSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.152">getCurrentSize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getCurrentSize--">BlockCache</a></code></span></div>
 <div class="block">Returns the occupied size of the block cache, in bytes.</div>
 <dl>
@@ -700,7 +700,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.152">getBlockCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.157">getBlockCount</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlockCount--">BlockCache</a></code></span></div>
 <div class="block">Returns the number of blocks currently cached in the block cache.</div>
 <dl>
@@ -717,7 +717,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataBlockCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.157">getDataBlockCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.162">getDataBlockCount</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getDataBlockCount--">BlockCache</a></code></span></div>
 <div class="block">Returns the number of data blocks currently cached in the block cache.</div>
 <dl>
@@ -734,7 +734,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>iterator</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.383">iterator</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.388">iterator</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true#iterator--" title="class or interface in java.lang">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code></dd>
@@ -751,7 +751,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCaches</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.388">getBlockCaches</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.393">getBlockCaches</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlockCaches--">getBlockCaches</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
@@ -766,7 +766,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.393">setMaxSize</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.398">setMaxSize</a>(long&nbsp;size)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html#setMaxSize-long-">ResizableBlockCache</a></code></span></div>
 <div class="block">Sets the max heap size that can be used by the BlockCache.</div>
 <dl>
@@ -783,7 +783,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcRefCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.397">getRpcRefCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.402">getRpcRefCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 </li>
 </ul>
 <a name="getFirstLevelCache--">
@@ -792,7 +792,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getFirstLevelCache</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.403">getFirstLevelCache</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/FirstLevelBlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">FirstLevelBlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.408">getFirstLevelCache</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index e450801..f2cf0f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -305,12 +305,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 512a273..821b8d3 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,9 +356,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index f93f239..ae66a26 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -300,11 +300,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index f036647..b40a0d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -318,13 +318,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index e8898ef..6b90450 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -126,8 +126,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 4c5b2df..e95d6a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -425,19 +425,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 75ee405..60b4626 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -218,10 +218,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index c9ab038..318bbeb 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 24c494e..3ec4fed 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/InternalScan.html b/devapidocs/org/apache/hadoop/hbase/regionserver/InternalScan.html
index 815078a..ebade5b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/InternalScan.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/InternalScan.html
@@ -272,7 +272,7 @@
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#addColumn-byte:A-byte:A-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#addFamily-byte:A-">addFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#createScanFromCursor-org.apache.hadoop.hbase.client.Cursor-">createScanFromCursor</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getAllowPartialResults--">getAllowPartialResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getBatch--">getBatch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCacheBlocks--">getCacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCaching--">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilies--">getFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilyMap--">getFamilyMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFilter--">getFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFingerprint--">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getLimit--">getLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultSize--">getMaxResultSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultsPerColumnFamily--">getMaxResultsPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxVersions--">getMaxVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getReadType--">getReadType</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getRowOffsetPerColumnFamily--">getRowOffsetPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStartRow--">getStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStopRow--">getStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getTimeRange--">getTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFamilies--">hasFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFilter--">hasFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStartRow--">includeStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStopRow--">includeStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isAsyncPrefetch--">isAsyncPrefetch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isGetScan--">isGetScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isNeedCursorResult--">isNeedCursorResult</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isRaw--">isRaw</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isReversed--">isReversed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isSmall--">isSmall</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#numFamilies--">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--">readAllVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-">readVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.util.Map-">setACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">setACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-">setAllowPartialResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">setAsyncPrefetch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAttribute-java.lang.String-byte:A-">setAttribute</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">setAuthorizations</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setBatch-int-">setBatch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCacheBlocks-boolean-">setCacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCaching-int-">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setColumnFamilyTimeRange-byte:A-long-long-">setColumnFamilyTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">setConsistency</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFamilyMap-java.util.Map-">setFamilyMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">setFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setId-java.lang.String-">setId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">setIsolationLevel</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-">setLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLoadColumnFamiliesOnDemand-boolean-">setLoadColumnFamiliesOnDemand</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-">setMaxResultSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultsPerColumnFamily-int-">setMaxResultsPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setNeedCursorResult-boolean-">setNeedCursorResult</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setOneRowLimit--">setOneRowLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setPriority-int-">setPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRaw-boolean-">setRaw</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">setReadType</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReplicaId-int-">setReplicaId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReversed-boolean-">setReversed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowOffsetPerColumnFamily-int-">setRowOffsetPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">setRowPrefixFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setScanMetricsEnabled-boolean-">setScanMetricsEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">setSmall</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">setTimeStamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#toMap-int-">toMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-boolean-">withStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-">withStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-boolean-">withStopRow</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#addColumn-byte:A-byte:A-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#addFamily-byte:A-">addFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#createScanFromCursor-org.apache.hadoop.hbase.client.Cursor-">createScanFromCursor</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getAllowPartialResults--">getAllowPartialResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getBatch--">getBatch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCacheBlocks--">getCacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getCaching--">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilies--">getFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFamilyMap--">getFamilyMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFilter--">getFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getFingerprint--">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getLimit--">getLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultSize--">getMaxResultSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxResultsPerColumnFamily--">getMaxResultsPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getMaxVersions--">getMaxVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getReadType--">getReadType</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getRowOffsetPerColumnFamily--">getRowOffsetPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStartRow--">getStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getStopRow--">getStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#getTimeRange--">getTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFamilies--">hasFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#hasFilter--">hasFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStartRow--">includeStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#includeStopRow--">includeStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isAsyncPrefetch--">isAsyncPrefetch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isGetScan--">isGetScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isNeedCursorResult--">isNeedCursorResult</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isRaw--">isRaw</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isReversed--">isReversed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#numFamilies--">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readAllVersions--">readAllVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#readVersions-int-">readVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.util.Map-">setACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setACL-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">setACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAllowPartialResults-boolean-">setAllowPartialResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">setAsyncPrefetch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAttribute-java.lang.String-byte:A-">setAttribute</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setAuthorizations-org.apache.hadoop.hbase.security.visibility.Authorizations-">setAuthorizations</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setBatch-int-">setBatch</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCacheBlocks-boolean-">setCacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setCaching-int-">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setColumnFamilyTimeRange-byte:A-long-long-">setColumnFamilyTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setConsistency-org.apache.hadoop.hbase.client.Consistency-">setConsistency</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFamilyMap-java.util.Map-">setFamilyMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setFilter-org.apache.hadoop.hbase.filter.Filter-">setFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setId-java.lang.String-">setId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setIsolationLevel-org.apache.hadoop.hbase.client.IsolationLevel-">setIsolationLevel</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLimit-int-">setLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setLoadColumnFamiliesOnDemand-boolean-">setLoadColumnFamiliesOnDemand</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultSize-long-">setMaxResultSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setMaxResultsPerColumnFamily-int-">setMaxResultsPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setNeedCursorResult-boolean-">setNeedCursorResult</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setOneRowLimit--">setOneRowLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setPriority-int-">setPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRaw-boolean-">setRaw</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-">setReadType</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReplicaId-int-">setReplicaId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setReversed-boolean-">setReversed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowOffsetPerColumnFamily-int-">setRowOffsetPerColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setRowPrefixFilter-byte:A-">setRowPrefixFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setScanMetricsEnabled-boolean-">setScanMetricsEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimeRange-long-long-">setTimeRange</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-">setTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#toMap-int-">toMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-">withStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-boolean-">withStartRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-">withStopRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-boolean-">withStopRow</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.client.Query">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 1d28cb7..4e5d4f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -729,20 +729,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 50d0429..cc1e095 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,8 +131,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 0ca438e..bffa090 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -251,8 +251,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 45caa1f..4793c48 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -163,10 +163,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index cec13c1..3bf3d5e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -190,8 +190,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 361499a..290e693 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,8 +211,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 02782b7..d07e5b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,15 +532,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 6f8e59e..73164ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ImmutableScan.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ImmutableScan.html
index bf8e7d4..8c59ff6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ImmutableScan.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ImmutableScan.html
@@ -71,483 +71,465 @@
 <span class="sourceLineNo">063</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setTimeRange");<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  }<a name="line.64"></a>
 <span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Deprecated<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Override<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public Scan setTimeStamp(long timestamp) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setTimeStamp");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @Override<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public Scan setTimestamp(long timestamp) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setTimestamp");<a name="line.74"></a>
+<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public Scan setTimestamp(long timestamp) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setTimestamp");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    throw new UnsupportedOperationException(<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      "ImmutableScan does not allow access to setColumnFamilyTimeRange");<a name="line.74"></a>
 <span class="sourceLineNo">075</span>  }<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
 <span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    throw new UnsupportedOperationException(<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      "ImmutableScan does not allow access to setColumnFamilyTimeRange");<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  @Override<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public Scan withStartRow(byte[] startRow) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStartRow");<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStartRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  @Override<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStopRow");<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStopRow");<a name="line.100"></a>
+<span class="sourceLineNo">078</span>  public Scan withStartRow(byte[] startRow) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStartRow");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  @Override<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStartRow");<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @Override<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStopRow");<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to withStopRow");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    throw new UnsupportedOperationException(<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      "ImmutableScan does not allow access to setRowPrefixFilter");<a name="line.100"></a>
 <span class="sourceLineNo">101</span>  }<a name="line.101"></a>
 <span class="sourceLineNo">102</span><a name="line.102"></a>
 <span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.104"></a>
+<span class="sourceLineNo">104</span>  public Scan readAllVersions() {<a name="line.104"></a>
 <span class="sourceLineNo">105</span>    throw new UnsupportedOperationException(<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      "ImmutableScan does not allow access to setRowPrefixFilter");<a name="line.106"></a>
+<span class="sourceLineNo">106</span>      "ImmutableScan does not allow access to readAllVersions");<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  }<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
 <span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public Scan readAllVersions() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    throw new UnsupportedOperationException(<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      "ImmutableScan does not allow access to readAllVersions");<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public Scan readVersions(int versions) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to readVersions");<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>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public Scan setBatch(int batch) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setBatch");<a name="line.122"></a>
+<span class="sourceLineNo">110</span>  public Scan readVersions(int versions) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to readVersions");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public Scan setBatch(int batch) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setBatch");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    throw new UnsupportedOperationException(<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      "ImmutableScan does not allow access to setMaxResultsPerColumnFamily");<a name="line.122"></a>
 <span class="sourceLineNo">123</span>  }<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
 <span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.126"></a>
+<span class="sourceLineNo">126</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    throw new UnsupportedOperationException(<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      "ImmutableScan does not allow access to setMaxResultsPerColumnFamily");<a name="line.128"></a>
+<span class="sourceLineNo">128</span>      "ImmutableScan does not allow access to setRowOffsetPerColumnFamily");<a name="line.128"></a>
 <span class="sourceLineNo">129</span>  }<a name="line.129"></a>
 <span class="sourceLineNo">130</span><a name="line.130"></a>
 <span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    throw new UnsupportedOperationException(<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      "ImmutableScan does not allow access to setRowOffsetPerColumnFamily");<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public Scan setCaching(int caching) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setCaching");<a name="line.139"></a>
+<span class="sourceLineNo">132</span>  public Scan setCaching(int caching) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setCaching");<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    throw new UnsupportedOperationException(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      "ImmutableScan does not allow access to setMaxResultSize");<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span><a name="line.141"></a>
 <span class="sourceLineNo">142</span>  @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    throw new UnsupportedOperationException(<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      "ImmutableScan does not allow access to setMaxResultSize");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public Scan setFilter(Filter filter) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setFilter");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public Scan setFamilyMap(Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; familyMap) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setFamilyMap");<a name="line.155"></a>
+<span class="sourceLineNo">143</span>  public Scan setFilter(Filter filter) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setFilter");<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public Scan setFamilyMap(Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; familyMap) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setFamilyMap");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    throw new UnsupportedOperationException(<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "ImmutableScan does not allow access to setCacheBlocks");<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span><a name="line.157"></a>
 <span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    throw new UnsupportedOperationException(<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      "ImmutableScan does not allow access to setCacheBlocks");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  @Override<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public Scan setReversed(boolean reversed) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReversed");<a name="line.166"></a>
+<span class="sourceLineNo">159</span>  public Scan setReversed(boolean reversed) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReversed");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    throw new UnsupportedOperationException(<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      "ImmutableScan does not allow access to setAllowPartialResults");<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  }<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.170"></a>
+<span class="sourceLineNo">170</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.170"></a>
 <span class="sourceLineNo">171</span>    throw new UnsupportedOperationException(<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      "ImmutableScan does not allow access to setAllowPartialResults");<a name="line.172"></a>
+<span class="sourceLineNo">172</span>      "ImmutableScan does not allow access to setLoadColumnFamiliesOnDemand");<a name="line.172"></a>
 <span class="sourceLineNo">173</span>  }<a name="line.173"></a>
 <span class="sourceLineNo">174</span><a name="line.174"></a>
 <span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    throw new UnsupportedOperationException(<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      "ImmutableScan does not allow access to setLoadColumnFamiliesOnDemand");<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public Scan setRaw(boolean raw) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setRaw");<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  @Deprecated<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public Scan setSmall(boolean small) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setSmall");<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setAttribute");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  @Override<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public Scan setId(String id) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setId");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Override<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    throw new UnsupportedOperationException(<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      "ImmutableScan does not allow access to setAuthorizations");<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setACL");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  public Scan setACL(String user, Permission perms) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setACL");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public Scan setConsistency(Consistency consistency) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    throw new UnsupportedOperationException(<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      "ImmutableScan does not allow access to setConsistency");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public Scan setReplicaId(int id) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReplicaId");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    throw new UnsupportedOperationException(<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      "ImmutableScan does not allow access to setIsolationLevel");<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public Scan setPriority(int priority) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setPriority");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    throw new UnsupportedOperationException(<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      "ImmutableScan does not allow access to setScanMetricsEnabled");<a name="line.243"></a>
+<span class="sourceLineNo">176</span>  public Scan setRaw(boolean raw) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setRaw");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  @Override<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setAttribute");<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @Override<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public Scan setId(String id) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setId");<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    throw new UnsupportedOperationException(<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      "ImmutableScan does not allow access to setAuthorizations");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  @Override<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setACL");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  @Override<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public Scan setACL(String user, Permission perms) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setACL");<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public Scan setConsistency(Consistency consistency) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    throw new UnsupportedOperationException(<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      "ImmutableScan does not allow access to setConsistency");<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>  @Override<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public Scan setReplicaId(int id) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReplicaId");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  @Override<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    throw new UnsupportedOperationException(<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      "ImmutableScan does not allow access to setIsolationLevel");<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public Scan setPriority(int priority) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setPriority");<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    throw new UnsupportedOperationException(<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      "ImmutableScan does not allow access to setScanMetricsEnabled");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Override<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  @Deprecated<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    throw new UnsupportedOperationException(<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      "ImmutableScan does not allow access to setAsyncPrefetch");<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  @Override<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public Scan setLimit(int limit) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setLimit");<a name="line.243"></a>
 <span class="sourceLineNo">244</span>  }<a name="line.244"></a>
 <span class="sourceLineNo">245</span><a name="line.245"></a>
 <span class="sourceLineNo">246</span>  @Override<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Deprecated<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    throw new UnsupportedOperationException(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      "ImmutableScan does not allow access to setAsyncPrefetch");<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>  @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public Scan setLimit(int limit) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setLimit");<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public Scan setOneRowLimit() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    throw new UnsupportedOperationException(<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      "ImmutableScan does not allow access to setOneRowLimit");<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  public Scan setReadType(ReadType readType) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReadType");<a name="line.266"></a>
+<span class="sourceLineNo">247</span>  public Scan setOneRowLimit() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    throw new UnsupportedOperationException(<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      "ImmutableScan does not allow access to setOneRowLimit");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public Scan setReadType(ReadType readType) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    throw new UnsupportedOperationException("ImmutableScan does not allow access to setReadType");<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Override<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    throw new UnsupportedOperationException(<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      "ImmutableScan does not allow access to setMvccReadPoint");<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  Scan resetMvccReadPoint() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    throw new UnsupportedOperationException(<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      "ImmutableScan does not allow access to resetMvccReadPoint");<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>  @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.270"></a>
+<span class="sourceLineNo">270</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.270"></a>
 <span class="sourceLineNo">271</span>    throw new UnsupportedOperationException(<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      "ImmutableScan does not allow access to setMvccReadPoint");<a name="line.272"></a>
+<span class="sourceLineNo">272</span>      "ImmutableScan does not allow access to setNeedCursorResult");<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span><a name="line.274"></a>
 <span class="sourceLineNo">275</span>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  Scan resetMvccReadPoint() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    throw new UnsupportedOperationException(<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      "ImmutableScan does not allow access to resetMvccReadPoint");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    throw new UnsupportedOperationException(<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      "ImmutableScan does not allow access to setNeedCursorResult");<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  @Override<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public long getMaxResultSize() {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return this.delegateScan.getMaxResultSize();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  }<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>  public Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; getFamilyMap() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return Collections.unmodifiableMap(this.delegateScan.getFamilyMap());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  public int numFamilies() {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    return this.delegateScan.numFamilies();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public boolean hasFamilies() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return this.delegateScan.hasFamilies();<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>  @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public byte[][] getFamilies() {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    final byte[][] families = this.delegateScan.getFamilies();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    byte[][] cloneFamilies = new byte[families.length][];<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    for (int i = 0; i &lt; families.length; i++) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      cloneFamilies[i] = Bytes.copy(families[i]);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return cloneFamilies;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  @Override<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public byte[] getStartRow() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    final byte[] startRow = this.delegateScan.getStartRow();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return Bytes.copy(startRow);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public boolean includeStartRow() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return this.delegateScan.includeStartRow();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  public byte[] getStopRow() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    final byte[] stopRow = this.delegateScan.getStopRow();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    return Bytes.copy(stopRow);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public boolean includeStopRow() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return this.delegateScan.includeStopRow();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  public int getMaxVersions() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    return this.delegateScan.getMaxVersions();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public int getBatch() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return this.delegateScan.getBatch();<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>  @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public int getMaxResultsPerColumnFamily() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    return this.delegateScan.getMaxResultsPerColumnFamily();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public int getRowOffsetPerColumnFamily() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    return this.delegateScan.getRowOffsetPerColumnFamily();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  public int getCaching() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return this.delegateScan.getCaching();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public TimeRange getTimeRange() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return this.delegateScan.getTimeRange();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public Filter getFilter() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    return this.delegateScan.getFilter();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public boolean hasFilter() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return this.delegateScan.hasFilter();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public boolean getCacheBlocks() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    return this.delegateScan.getCacheBlocks();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public boolean isReversed() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return this.delegateScan.isReversed();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  public boolean getAllowPartialResults() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return this.delegateScan.getAllowPartialResults();<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>  @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public byte[] getACL() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    final byte[] acl = this.delegateScan.getACL();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return Bytes.copy(acl);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return Collections.unmodifiableMap(this.delegateScan.getFingerprint());<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    return Collections.unmodifiableMap(this.delegateScan.toMap(maxCols));<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>  @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  public boolean isRaw() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    return this.delegateScan.isRaw();<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>  @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  @Deprecated<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public boolean isSmall() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return this.delegateScan.isSmall();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  public boolean isScanMetricsEnabled() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    return this.delegateScan.isScanMetricsEnabled();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public Boolean isAsyncPrefetch() {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return this.delegateScan.isAsyncPrefetch();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public int getLimit() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return this.delegateScan.getLimit();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  public ReadType getReadType() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    return this.delegateScan.getReadType();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  @Override<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  long getMvccReadPoint() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return this.delegateScan.getMvccReadPoint();<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>  @Override<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public boolean isNeedCursorResult() {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return this.delegateScan.isNeedCursorResult();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public byte[] getAttribute(String name) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    final byte[] attribute = this.delegateScan.getAttribute(name);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    return Bytes.copy(attribute);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public Consistency getConsistency() {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return this.delegateScan.getConsistency();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  @Override<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  public long getAttributeSize() {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    return this.delegateScan.getAttributeSize();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>  @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  public Map&lt;String, byte[]&gt; getAttributesMap() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    return Collections.unmodifiableMap(this.delegateScan.getAttributesMap());<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>  @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public Boolean getLoadColumnFamiliesOnDemandValue() {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return this.delegateScan.getLoadColumnFamiliesOnDemandValue();<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public int getPriority() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return this.delegateScan.getPriority();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  @Override<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  public Map&lt;byte[], TimeRange&gt; getColumnFamilyTimeRange() {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    return Collections.unmodifiableMap(this.delegateScan.getColumnFamilyTimeRange());<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>  @Override<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  public int getReplicaId() {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    return this.delegateScan.getReplicaId();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span>  @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  public boolean doLoadColumnFamiliesOnDemand() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return this.delegateScan.doLoadColumnFamiliesOnDemand();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  public String getId() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    return this.delegateScan.getId();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  @Override<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  public boolean isGetScan() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return this.delegateScan.isGetScan();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>  @Override<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  public IsolationLevel getIsolationLevel() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    return this.delegateScan.getIsolationLevel();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  @Override<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public Authorizations getAuthorizations() throws DeserializationException {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    return this.delegateScan.getAuthorizations();<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>  @Override<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public String toString(int maxCols) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return this.delegateScan.toString(maxCols);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public String toString() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return this.delegateScan.toString();<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>  @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  public Map&lt;String, Object&gt; toMap() {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    return Collections.unmodifiableMap(this.delegateScan.toMap());<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>  @Override<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public String toJSON(int maxCols) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return this.delegateScan.toJSON(maxCols);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  @Override<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  public String toJSON() throws IOException {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    return this.delegateScan.toJSON();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span>}<a name="line.542"></a>
+<span class="sourceLineNo">276</span>  public long getMaxResultSize() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return this.delegateScan.getMaxResultSize();<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>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; getFamilyMap() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return Collections.unmodifiableMap(this.delegateScan.getFamilyMap());<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public int numFamilies() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return this.delegateScan.numFamilies();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public boolean hasFamilies() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this.delegateScan.hasFamilies();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  public byte[][] getFamilies() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    final byte[][] families = this.delegateScan.getFamilies();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    byte[][] cloneFamilies = new byte[families.length][];<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    for (int i = 0; i &lt; families.length; i++) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      cloneFamilies[i] = Bytes.copy(families[i]);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return cloneFamilies;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public byte[] getStartRow() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    final byte[] startRow = this.delegateScan.getStartRow();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return Bytes.copy(startRow);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  @Override<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  public boolean includeStartRow() {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    return this.delegateScan.includeStartRow();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Override<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public byte[] getStopRow() {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    final byte[] stopRow = this.delegateScan.getStopRow();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    return Bytes.copy(stopRow);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  public boolean includeStopRow() {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    return this.delegateScan.includeStopRow();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public int getMaxVersions() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return this.delegateScan.getMaxVersions();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public int getBatch() {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return this.delegateScan.getBatch();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public int getMaxResultsPerColumnFamily() {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    return this.delegateScan.getMaxResultsPerColumnFamily();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  @Override<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  public int getRowOffsetPerColumnFamily() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return this.delegateScan.getRowOffsetPerColumnFamily();<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>  @Override<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public int getCaching() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    return this.delegateScan.getCaching();<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public TimeRange getTimeRange() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    return this.delegateScan.getTimeRange();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  @Override<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public Filter getFilter() {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return this.delegateScan.getFilter();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public boolean hasFilter() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return this.delegateScan.hasFilter();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public boolean getCacheBlocks() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return this.delegateScan.getCacheBlocks();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public boolean isReversed() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return this.delegateScan.isReversed();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public boolean getAllowPartialResults() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    return this.delegateScan.getAllowPartialResults();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  public byte[] getACL() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    final byte[] acl = this.delegateScan.getACL();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return Bytes.copy(acl);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return Collections.unmodifiableMap(this.delegateScan.getFingerprint());<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return Collections.unmodifiableMap(this.delegateScan.toMap(maxCols));<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public boolean isRaw() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.delegateScan.isRaw();<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>  @Override<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  public boolean isScanMetricsEnabled() {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    return this.delegateScan.isScanMetricsEnabled();<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>  @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public Boolean isAsyncPrefetch() {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return this.delegateScan.isAsyncPrefetch();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>  @Override<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public int getLimit() {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    return this.delegateScan.getLimit();<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public ReadType getReadType() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return this.delegateScan.getReadType();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  long getMvccReadPoint() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    return this.delegateScan.getMvccReadPoint();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  public boolean isNeedCursorResult() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return this.delegateScan.isNeedCursorResult();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  @Override<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  public byte[] getAttribute(String name) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    final byte[] attribute = this.delegateScan.getAttribute(name);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    return Bytes.copy(attribute);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  public Consistency getConsistency() {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    return this.delegateScan.getConsistency();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>  @Override<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  public long getAttributeSize() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    return this.delegateScan.getAttributeSize();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  @Override<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public Map&lt;String, byte[]&gt; getAttributesMap() {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return Collections.unmodifiableMap(this.delegateScan.getAttributesMap());<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @Override<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public Boolean getLoadColumnFamiliesOnDemandValue() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return this.delegateScan.getLoadColumnFamiliesOnDemandValue();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  @Override<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  public int getPriority() {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    return this.delegateScan.getPriority();<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public Map&lt;byte[], TimeRange&gt; getColumnFamilyTimeRange() {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return Collections.unmodifiableMap(this.delegateScan.getColumnFamilyTimeRange());<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  @Override<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public int getReplicaId() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    return this.delegateScan.getReplicaId();<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @Override<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  public boolean doLoadColumnFamiliesOnDemand() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this.delegateScan.doLoadColumnFamiliesOnDemand();<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public String getId() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return this.delegateScan.getId();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public boolean isGetScan() {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    return this.delegateScan.isGetScan();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
+<span class="sourceLineNo">488</span><a name="line.488"></a>
+<span class="sourceLineNo">489</span>  @Override<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  public IsolationLevel getIsolationLevel() {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    return this.delegateScan.getIsolationLevel();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  @Override<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  public Authorizations getAuthorizations() throws DeserializationException {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    return this.delegateScan.getAuthorizations();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  }<a name="line.497"></a>
+<span class="sourceLineNo">498</span><a name="line.498"></a>
+<span class="sourceLineNo">499</span>  @Override<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  public String toString(int maxCols) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    return this.delegateScan.toString(maxCols);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>  }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>  @Override<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public String toString() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return this.delegateScan.toString();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  public Map&lt;String, Object&gt; toMap() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    return Collections.unmodifiableMap(this.delegateScan.toMap());<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>  @Override<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  public String toJSON(int maxCols) throws IOException {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    return this.delegateScan.toJSON(maxCols);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>  public String toJSON() throws IOException {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    return this.delegateScan.toJSON();<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>}<a name="line.524"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 5fe1313..fe87f3a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -153,964 +153,895 @@
 <span class="sourceLineNo">145</span>  public static final boolean DEFAULT_HBASE_CLIENT_SCANNER_ASYNC_PREFETCH = false;<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
 <span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Set it true for small scan to get better performance Small scan should use pread and big scan<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * cause too much network io [89-fb] Using pread for non-compaction read request<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * would do openScanner,next,closeScanner in one RPC call. It means the better performance for<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * small scan. [HBASE-9488]. Generally, if the scan range is within one data block(64KB), it could<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * be considered as a small scan.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private boolean small = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * the mvcc is only valid within region scope.<a name="line.160"></a>
+<span class="sourceLineNo">148</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the mvcc is only valid within region scope.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private long mvccReadPoint = -1L;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * rows reaches this value.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int limit = -1;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Control whether to use pread at server side.<a name="line.160"></a>
 <span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private long mvccReadPoint = -1L;<a name="line.162"></a>
+<span class="sourceLineNo">162</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * rows reaches this value.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private int limit = -1;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Control whether to use pread at server side.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  private boolean needCursorResult = false;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Create a Scan operation across all rows.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public Scan() {}<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  /**<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Creates a new instance of this class while copying all values.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param scan  The scan instance to copy from.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @throws IOException When copying the values fails.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public Scan(Scan scan) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    startRow = scan.getStartRow();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    includeStartRow = scan.includeStartRow();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    stopRow  = scan.getStopRow();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    includeStopRow = scan.includeStopRow();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    maxVersions = scan.getMaxVersions();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    batch = scan.getBatch();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    caching = scan.getCaching();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    maxResultSize = scan.getMaxResultSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    filter = scan.getFilter(); // clone?<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    consistency = scan.getConsistency();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    reversed = scan.isReversed();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    small = scan.isSmall();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      byte [] fam = entry.getKey();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (byte[] col : cols) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          addColumn(fam, col);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      } else {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        addFamily(fam);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      TimeRange tr = entry.getValue();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.limit = scan.getLimit();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    setPriority(scan.getPriority());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    readType = scan.getReadType();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    super.setReplicaId(scan.getReplicaId());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Builds a scan object with the same specs as get.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param get get to model scan after<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public Scan(Get get) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    this.startRow = get.getRow();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.includeStartRow = true;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.stopRow = get.getRow();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.includeStopRow = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this.filter = get.getFilter();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    this.maxVersions = get.getMaxVersions();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    this.tr = get.getTimeRange();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.familyMap = get.getFamilyMap();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.asyncPrefetch = false;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    this.consistency = get.getConsistency();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      TimeRange tr = entry.getValue();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.mvccReadPoint = -1L;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    setPriority(get.getPriority());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    super.setReplicaId(get.getReplicaId());<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>  public boolean isGetScan() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Get all columns from the specified family.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * &lt;p&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * Overrides previous calls to addColumn for this family.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param family family name<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @return this<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public Scan addFamily(byte [] family) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    familyMap.remove(family);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    familyMap.put(family, null);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return this;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Get the column from the specified family with the specified qualifier.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * &lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Overrides previous calls to addFamily for this family.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param family family name<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param qualifier column qualifier<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @return this<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if(set == null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      familyMap.put(family, set);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (qualifier == null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    set.add(qualifier);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return this;<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>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Get versions of columns only within the specified timestamp range,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * your time range spans more than one version and you want all versions<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * returned, up the number of versions beyond the default.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @see #readAllVersions()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @see #readVersions(int)<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return this<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return this;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * defaut.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param timestamp version timestamp<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @see #readAllVersions()<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @see #readVersions(int)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @return this<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *             Use {@link #setTimestamp(long)} instead<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Deprecated<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Scan setTimeStamp(long timestamp)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.setTimestamp(timestamp);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * defaut.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * @param timestamp version timestamp<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @see #readAllVersions()<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @see #readVersions(int)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  public Scan setTimestamp(long timestamp) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tr = TimeRange.at(timestamp);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } catch(Exception e) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throw e;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Set the start row of the scan.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;p&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * specified row.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param startRow row to start scanner at or after<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @return this<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Scan withStartRow(byte[] startRow) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return withStartRow(startRow, true);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Set the start row of the scan.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * &lt;p&gt;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * will start from the next closest row after the specified row.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * &lt;p&gt;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * &lt;/p&gt;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param startRow row to start scanner at or after<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param inclusive whether we should include the start row when scan<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @return this<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.startRow = startRow;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.includeStartRow = inclusive;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * Set the stop row of the scan.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * &lt;p&gt;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * &lt;/p&gt;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param stopRow row to end at (exclusive)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return this<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return withStopRow(stopRow, false);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * Set the stop row of the scan.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * &lt;p&gt;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param stopRow row to end at<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @param inclusive whether we should include the stop row when scan<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @return this<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.436"></a>
+<span class="sourceLineNo">164</span>  private boolean needCursorResult = false;<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create a Scan operation across all rows.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Scan() {}<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Creates a new instance of this class while copying all values.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param scan  The scan instance to copy from.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @throws IOException When copying the values fails.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Scan(Scan scan) throws IOException {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    startRow = scan.getStartRow();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    includeStartRow = scan.includeStartRow();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    stopRow  = scan.getStopRow();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    includeStopRow = scan.includeStopRow();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    maxVersions = scan.getMaxVersions();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    batch = scan.getBatch();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    caching = scan.getCaching();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    maxResultSize = scan.getMaxResultSize();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    filter = scan.getFilter(); // clone?<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    consistency = scan.getConsistency();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    reversed = scan.isReversed();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      byte [] fam = entry.getKey();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        for (byte[] col : cols) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          addColumn(fam, col);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        addFamily(fam);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TimeRange tr = entry.getValue();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.limit = scan.getLimit();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    setPriority(scan.getPriority());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    readType = scan.getReadType();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    super.setReplicaId(scan.getReplicaId());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * Builds a scan object with the same specs as get.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param get get to model scan after<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public Scan(Get get) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.startRow = get.getRow();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    this.includeStartRow = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.stopRow = get.getRow();<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.includeStopRow = true;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this.filter = get.getFilter();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    this.maxVersions = get.getMaxVersions();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.tr = get.getTimeRange();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.familyMap = get.getFamilyMap();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.asyncPrefetch = false;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.consistency = get.getConsistency();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      TimeRange tr = entry.getValue();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.mvccReadPoint = -1L;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    setPriority(get.getPriority());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    super.setReplicaId(get.getReplicaId());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public boolean isGetScan() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<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>   * Get all columns from the specified family.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Overrides previous calls to addColumn for this family.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * @param family family name<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return this<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public Scan addFamily(byte [] family) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    familyMap.remove(family);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    familyMap.put(family, null);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Get the column from the specified family with the specified qualifier.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * &lt;p&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Overrides previous calls to addFamily for this family.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param family family name<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param qualifier column qualifier<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return this<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    if(set == null) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      familyMap.put(family, set);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (qualifier == null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    set.add(qualifier);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * Get versions of columns only within the specified timestamp range,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * your time range spans more than one version and you want all versions<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * returned, up the number of versions beyond the default.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @see #readAllVersions()<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see #readVersions(int)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @return this<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * defaut.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param timestamp version timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @see #readAllVersions()<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #readVersions(int)<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @return this<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public Scan setTimestamp(long timestamp) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      tr = TimeRange.at(timestamp);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } catch(Exception e) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      throw e;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * Set the start row of the scan.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * specified row.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param startRow row to start scanner at or after<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @return this<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public Scan withStartRow(byte[] startRow) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    return withStartRow(startRow, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Set the start row of the scan.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * &lt;p&gt;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * will start from the next closest row after the specified row.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * &lt;p&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * &lt;/p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @param startRow row to start scanner at or after<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @param inclusive whether we should include the start row when scan<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return this<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    this.startRow = startRow;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    this.includeStartRow = inclusive;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    return this;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Set the stop row of the scan.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * &lt;p&gt;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * &lt;p&gt;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;/p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param stopRow row to end at (exclusive)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return this<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return withStopRow(stopRow, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Set the stop row of the scan.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * &lt;p&gt;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param stopRow row to end at<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param inclusive whether we should include the stop row when scan<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return this<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.stopRow = stopRow;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    this.includeStopRow = inclusive;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return this;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return this<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *   The Result of this scan might contains : "111"<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  @Deprecated<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (rowPrefix == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    } else {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      this.withStartRow(rowPrefix);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.436"></a>
 <span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    this.stopRow = stopRow;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    this.includeStopRow = inclusive;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return this;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @return this<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   *   The Result of this scan might contains : "111"<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  @Deprecated<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    if (rowPrefix == null) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.withStartRow(rowPrefix);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return this;<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>   * Get all available versions.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @return this<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public Scan readAllVersions() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    return this;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Get up to the specified number of versions of each column.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param versions specified number of versions for each column<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @return this<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public Scan readVersions(int versions) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    this.maxVersions = versions;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return this;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param batch the maximum number of values<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public Scan setBatch(int batch) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      throw new IncompatibleFilterException(<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        "Cannot set batch on a scan using a filter" +<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        " that returns true for filter.hasFilterRow");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    this.batch = batch;<a name="line.505"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * Get all available versions.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return this<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  public Scan readAllVersions() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * Get up to the specified number of versions of each column.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @param versions specified number of versions for each column<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return this<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   */<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public Scan readVersions(int versions) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    this.maxVersions = versions;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return this;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<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>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param batch the maximum number of values<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  public Scan setBatch(int batch) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      throw new IncompatibleFilterException(<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        "Cannot set batch on a scan using a filter" +<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        " that returns true for filter.hasFilterRow");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.batch = batch;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * Set the maximum number of values to return per row per Column Family<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param limit the maximum number of values returned / row / CF<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    this.storeLimit = limit;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return this;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * Set offset for the row per Column Family.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * @param offset is the number of kvs that will be skipped.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.storeOffset = offset;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return this;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * apply.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param caching the number of rows for caching<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
+<span class="sourceLineNo">504</span>  public Scan setCaching(int caching) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    this.caching = caching;<a name="line.505"></a>
 <span class="sourceLineNo">506</span>    return this;<a name="line.506"></a>
 <span class="sourceLineNo">507</span>  }<a name="line.507"></a>
 <span class="sourceLineNo">508</span><a name="line.508"></a>
 <span class="sourceLineNo">509</span>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * Set the maximum number of values to return per row per Column Family<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param limit the maximum number of values returned / row / CF<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    this.storeLimit = limit;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    return this;<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>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * Set offset for the row per Column Family.<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param offset is the number of kvs that will be skipped.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    this.storeOffset = offset;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return this;<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>  /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * apply.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param caching the number of rows for caching<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public Scan setCaching(int caching) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    this.caching = caching;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  public long getMaxResultSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    return maxResultSize;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>  /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * maximum result size will be set for this scan, and the global configured<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * value will be used instead. (Defaults to unlimited).<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   *<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    this.maxResultSize = maxResultSize;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this;<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>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public Scan setFilter(Filter filter) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    super.setFilter(filter);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return this;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  /**<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * Setting the familyMap<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param familyMap map of family to qualifier<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @return this<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    this.familyMap = familyMap;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return this;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * Getting the familyMap<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @return familyMap<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    return this.familyMap;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return the number of families in familyMap<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   */<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public int numFamilies() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    if(hasFamilies()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return this.familyMap.size();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @return true if familyMap is non empty, false otherwise<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public boolean hasFamilies() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return !this.familyMap.isEmpty();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  /**<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return the keys of the familyMap<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public byte[][] getFamilies() {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if(hasFamilies()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @return the startrow<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public byte [] getStartRow() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return this.startRow;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * @return if we should include start row when scan<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  public boolean includeStartRow() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return includeStartRow;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return the stoprow<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public byte[] getStopRow() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    return this.stopRow;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @return if we should include stop row when scan<a name="line.631"></a>
+<span class="sourceLineNo">510</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  public long getMaxResultSize() {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return maxResultSize;<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<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>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * maximum result size will be set for this scan, and the global configured<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * value will be used instead. (Defaults to unlimited).<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    this.maxResultSize = maxResultSize;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public Scan setFilter(Filter filter) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    super.setFilter(filter);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return this;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * Setting the familyMap<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @param familyMap map of family to qualifier<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @return this<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    this.familyMap = familyMap;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    return this;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Getting the familyMap<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return familyMap<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return this.familyMap;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * @return the number of families in familyMap<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   */<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  public int numFamilies() {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    if(hasFamilies()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return this.familyMap.size();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    return 0;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * @return true if familyMap is non empty, false otherwise<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  public boolean hasFamilies() {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return !this.familyMap.isEmpty();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span>   * @return the keys of the familyMap<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   */<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  public byte[][] getFamilies() {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    if(hasFamilies()) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    return null;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return the startrow<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public byte [] getStartRow() {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    return this.startRow;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @return if we should include start row when scan<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public boolean includeStartRow() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return includeStartRow;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the stoprow<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public byte[] getStopRow() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return this.stopRow;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return if we should include stop row when scan<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public boolean includeStopRow() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return includeStopRow;<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>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @return the max number of versions to fetch<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  public int getMaxVersions() {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    return this.maxVersions;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @return maximum number of values to return for a single call to next()<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  public int getBatch() {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    return this.batch;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>  /**<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return maximum number of values to return per row per CF<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public int getMaxResultsPerColumnFamily() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return this.storeLimit;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Method for retrieving the scan's offset per row per column<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * family (#kvs to be skipped)<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * @return row offset<a name="line.631"></a>
 <span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean includeStopRow() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return includeStopRow;<a name="line.634"></a>
+<span class="sourceLineNo">633</span>  public int getRowOffsetPerColumnFamily() {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    return this.storeOffset;<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  }<a name="line.635"></a>
 <span class="sourceLineNo">636</span><a name="line.636"></a>
 <span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @return the max number of versions to fetch<a name="line.638"></a>
+<span class="sourceLineNo">638</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.638"></a>
 <span class="sourceLineNo">639</span>   */<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  public int getMaxVersions() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    return this.maxVersions;<a name="line.641"></a>
+<span class="sourceLineNo">640</span>  public int getCaching() {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    return this.caching;<a name="line.641"></a>
 <span class="sourceLineNo">642</span>  }<a name="line.642"></a>
 <span class="sourceLineNo">643</span><a name="line.643"></a>
 <span class="sourceLineNo">644</span>  /**<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @return maximum number of values to return for a single call to next()<a name="line.645"></a>
+<span class="sourceLineNo">645</span>   * @return TimeRange<a name="line.645"></a>
 <span class="sourceLineNo">646</span>   */<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  public int getBatch() {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return this.batch;<a name="line.648"></a>
+<span class="sourceLineNo">647</span>  public TimeRange getTimeRange() {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return this.tr;<a name="line.648"></a>
 <span class="sourceLineNo">649</span>  }<a name="line.649"></a>
 <span class="sourceLineNo">650</span><a name="line.650"></a>
 <span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * @return maximum number of values to return per row per CF<a name="line.652"></a>
+<span class="sourceLineNo">652</span>   * @return RowFilter<a name="line.652"></a>
 <span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public int getMaxResultsPerColumnFamily() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    return this.storeLimit;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * Method for retrieving the scan's offset per row per column<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * family (#kvs to be skipped)<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * @return row offset<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   */<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  public int getRowOffsetPerColumnFamily() {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    return this.storeOffset;<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>  /**<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   */<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  public int getCaching() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return this.caching;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  }<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>   * @return TimeRange<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public TimeRange getTimeRange() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return this.tr;<a name="line.678"></a>
+<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  public Filter getFilter() {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    return filter;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @return true is a filter has been specified, false if not<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
+<span class="sourceLineNo">662</span>  public boolean hasFilter() {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return filter != null;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<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>   * Set whether blocks should be cached for this Scan.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * This is true by default.  When true, default settings of the table and<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * family are used (this will never override caching blocks if the block<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * cache is disabled for that family or entirely).<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * will not be cached<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    this.cacheBlocks = cacheBlocks;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return this;<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>  /**<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   * @return RowFilter<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   */<a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Override<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public Filter getFilter() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return filter;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @return true is a filter has been specified, false if not<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean hasFilter() {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    return filter != null;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * Set whether blocks should be cached for this Scan.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   * &lt;p&gt;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * This is true by default.  When true, default settings of the table and<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * family are used (this will never override caching blocks if the block<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * cache is disabled for that family or entirely).<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * will not be cached<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.cacheBlocks = cacheBlocks;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    return this;<a name="line.708"></a>
+<span class="sourceLineNo">682</span>   * Get whether blocks should be cached for this Scan.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @return true if default caching should be used, false if blocks should not<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   * be cached<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   */<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  public boolean getCacheBlocks() {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    return cacheBlocks;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * Set whether this scan is a reversed one<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * &lt;p&gt;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * This is false by default which means forward(normal) scan.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   *<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * @param reversed if true, scan will be backward order<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return this<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  public Scan setReversed(boolean reversed) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    this.reversed = reversed;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    return this;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">702</span><a name="line.702"></a>
+<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * Get whether this scan is a reversed one.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * @return true if backward scan, false if forward(default) scan<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReversed() {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    return reversed;<a name="line.708"></a>
 <span class="sourceLineNo">709</span>  }<a name="line.709"></a>
 <span class="sourceLineNo">710</span><a name="line.710"></a>
 <span class="sourceLineNo">711</span>  /**<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * Get whether blocks should be cached for this Scan.<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * @return true if default caching should be used, false if blocks should not<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * be cached<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public boolean getCacheBlocks() {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    return cacheBlocks;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * Set whether this scan is a reversed one<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * &lt;p&gt;<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * This is false by default which means forward(normal) scan.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   *<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * @param reversed if true, scan will be backward order<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * @return this<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  public Scan setReversed(boolean reversed) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    this.reversed = reversed;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    return this;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Get whether this scan is a reversed one.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @return true if backward scan, false if forward(default) scan<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  public boolean isReversed() {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    return reversed;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>  }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>  /**<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * By default this value is false and the complete results will be assembled client side<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * before being delivered to the caller.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param allowPartialResults<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return this<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @see #setBatch(int)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    this.allowPartialResults = allowPartialResults;<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return this;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   */<a name="line.760"></a>
-<span class="sourceLineNo">761</span>  public boolean getAllowPartialResults() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return allowPartialResults;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  @Override<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>  /**<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * Compile the table and column family (i.e. schema) information<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * logging, and administration tools.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @return Map<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   */<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  @Override<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    if(this.familyMap.isEmpty()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      map.put("families", "ALL");<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      return map;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      map.put("families", families);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        this.familyMap.entrySet()) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    return map;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  /**<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * Useful for debugging, logging, and administration tools.<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return Map<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  @Override<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    // start with the fingerpring map and build on top of it<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // map from families to column list replaces fingerprint's list of families<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    map.put("families", familyColumns);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // add scalar information first<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    map.put("maxVersions", this.maxVersions);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    map.put("batch", this.batch);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    map.put("caching", this.caching);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    timeRange.add(this.tr.getMin());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    timeRange.add(this.tr.getMax());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    map.put("timeRange", timeRange);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    int colCount = 0;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    // iterate through affected families and list out up to maxCols columns<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      this.familyMap.entrySet()) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      if(entry.getValue() == null) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        colCount++;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        --maxCols;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        columns.add("ALL");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      } else {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>        colCount += entry.getValue().size();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        if (maxCols &lt;= 0) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          continue;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>        for (byte [] column : entry.getValue()) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          if (--maxCols &lt;= 0) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            continue;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          columns.add(Bytes.toStringBinary(column));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        }<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    map.put("totalColumns", colCount);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    if (this.filter != null) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      map.put("filter", this.filter.toString());<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    // add the id if set<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (getId() != null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      map.put("id", getId());<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return map;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Enable/disable "raw" mode for this scan.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * If "raw" is enabled the scan will return all<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * delete marker and deleted rows that have not<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * been collected, yet.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * This is mostly useful for Scan on column families<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * It is an error to specify any column when "raw" is set.<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  public Scan setRaw(boolean raw) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    return this;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @return True if this Scan is in "raw" mode.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   */<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  public boolean isRaw() {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.874"></a>
+<span class="sourceLineNo">712</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * By default this value is false and the complete results will be assembled client side<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * before being delivered to the caller.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param allowPartialResults<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   * @return this<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   * @see #setBatch(int)<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    this.allowPartialResults = allowPartialResults;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    return this;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span>  /**<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public boolean getAllowPartialResults() {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    return allowPartialResults;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
+<span class="sourceLineNo">736</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Compile the table and column family (i.e. schema) information<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   * logging, and administration tools.<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   * @return Map<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Override<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    if(this.familyMap.isEmpty()) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      map.put("families", "ALL");<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      return map;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    } else {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      map.put("families", families);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        this.familyMap.entrySet()) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    return map;<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * Useful for debugging, logging, and administration tools.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @return Map<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  @Override<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    // start with the fingerpring map and build on top of it<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    // map from families to column list replaces fingerprint's list of families<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    map.put("families", familyColumns);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    // add scalar information first<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    map.put("maxVersions", this.maxVersions);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    map.put("batch", this.batch);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    map.put("caching", this.caching);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    timeRange.add(this.tr.getMin());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    timeRange.add(this.tr.getMax());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    map.put("timeRange", timeRange);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    int colCount = 0;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // iterate through affected families and list out up to maxCols columns<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      this.familyMap.entrySet()) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      if(entry.getValue() == null) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        colCount++;<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        --maxCols;<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        columns.add("ALL");<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      } else {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        colCount += entry.getValue().size();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        if (maxCols &lt;= 0) {<a name="line.802"></a>
+<span class="sourceLineNo">803</span>          continue;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        for (byte [] column : entry.getValue()) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>          if (--maxCols &lt;= 0) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>            continue;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
+<span class="sourceLineNo">809</span>          columns.add(Bytes.toStringBinary(column));<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>    }<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    map.put("totalColumns", colCount);<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    if (this.filter != null) {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      map.put("filter", this.filter.toString());<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // add the id if set<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (getId() != null) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      map.put("id", getId());<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    return map;<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>  /**<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * Enable/disable "raw" mode for this scan.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * If "raw" is enabled the scan will return all<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * delete marker and deleted rows that have not<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * been collected, yet.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * This is mostly useful for Scan on column families<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * It is an error to specify any column when "raw" is set.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   */<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public Scan setRaw(boolean raw) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    return this;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  }<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>   * @return True if this Scan is in "raw" mode.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   */<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  public boolean isRaw() {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>  @Override<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    return (Scan) super.setAttribute(name, value);<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>  @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public Scan setId(String id) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    return (Scan) super.setId(id);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>  }<a name="line.860"></a>
+<span class="sourceLineNo">861</span><a name="line.861"></a>
+<span class="sourceLineNo">862</span>  @Override<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    return (Scan) super.setACL(perms);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
+<span class="sourceLineNo">866</span><a name="line.866"></a>
+<span class="sourceLineNo">867</span>  @Override<a name="line.867"></a>
+<span class="sourceLineNo">868</span>  public Scan setACL(String user, Permission perms) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    return (Scan) super.setACL(user, perms);<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>  @Override<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  public Scan setConsistency(Consistency consistency) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    return (Scan) super.setConsistency(consistency);<a name="line.874"></a>
 <span class="sourceLineNo">875</span>  }<a name="line.875"></a>
 <span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * Set whether this scan is a small scan<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Small scan should use pread and big scan can use seek + read seek + read is fast but can cause<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * data block(64KB), it could be considered as a small scan.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * @param small<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Use {@link #setLimit(int)} and<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   *   {@link #setReadType(ReadType)} instead. And for the one rpc optimization, now we will also<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   *   fetch data when openScanner, and if the number of rows reaches the limit then we will close<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   *   the scanner automatically which means we will fall back to one rpc.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @see #setLimit(int)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @see #setReadType(ReadType)<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  @Deprecated<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  public Scan setSmall(boolean small) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.small = small;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (small) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      this.readType = ReadType.PREAD;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return this;<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Get whether this scan is a small scan<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * @return true if small scan<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. See the comment of<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   *   {@link #setSmall(boolean)}<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  @Deprecated<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  public boolean isSmall() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    return small;<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>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return (Scan) super.setAttribute(name, value);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>  }<a name="line.919"></a>
-<span class="sourceLineNo">920</span><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  @Override<a name="line.921"></a>
-<span class="sourceLineNo">922</span>  public Scan setId(String id) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    return (Scan) super.setId(id);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  @Override<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    return (Scan) super.setACL(perms);<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>  @Override<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  public Scan setACL(String user, Permission perms) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    return (Scan) super.setACL(user, perms);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  @Override<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  public Scan setConsistency(Consistency consistency) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    return (Scan) super.setConsistency(consistency);<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Override<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  public Scan setReplicaId(int Id) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return (Scan) super.setReplicaId(Id);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return (Scan) super.setIsolationLevel(level);<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>  @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  public Scan setPriority(int priority) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return (Scan) super.setPriority(priority);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return this;<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   */<a name="line.972"></a>
-<span class="sourceLineNo">973</span>  public boolean isScanMetricsEnabled() {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  public Boolean isAsyncPrefetch() {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return asyncPrefetch;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.984"></a>
+<span class="sourceLineNo">877</span>  @Override<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  public Scan setReplicaId(int Id) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    return (Scan) super.setReplicaId(Id);<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
+<span class="sourceLineNo">881</span><a name="line.881"></a>
+<span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    return (Scan) super.setIsolationLevel(level);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span>  @Override<a name="line.887"></a>
+<span class="sourceLineNo">888</span>  public Scan setPriority(int priority) {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    return (Scan) super.setPriority(priority);<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>  /**<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   */<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    return this;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span>  /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
+<span class="sourceLineNo">904</span>  public boolean isScanMetricsEnabled() {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
+<span class="sourceLineNo">908</span><a name="line.908"></a>
+<span class="sourceLineNo">909</span>  public Boolean isAsyncPrefetch() {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    return asyncPrefetch;<a name="line.910"></a>
+<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
+<span class="sourceLineNo">912</span><a name="line.912"></a>
+<span class="sourceLineNo">913</span>  /**<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
+<span class="sourceLineNo">917</span>  @Deprecated<a name="line.917"></a>
+<span class="sourceLineNo">918</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    return this;<a name="line.920"></a>
+<span class="sourceLineNo">921</span>  }<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>   * @return the limit of rows for this scan<a name="line.924"></a>
+<span class="sourceLineNo">925</span>   */<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  public int getLimit() {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    return limit;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>  }<a name="line.928"></a>
+<span class="sourceLineNo">929</span><a name="line.929"></a>
+<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * reaches this value.<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * &lt;p&gt;<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @param limit the limit of rows for this scan<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @return this<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  public Scan setLimit(int limit) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    this.limit = limit;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    return this;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>  }<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>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @return this<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  public Scan setOneRowLimit() {<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    return setLimit(1).setReadType(ReadType.PREAD);<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>  @InterfaceAudience.Public<a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public enum ReadType {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    DEFAULT, STREAM, PREAD<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>  /**<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * @return the read type for this scan<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   */<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public ReadType getReadType() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    return readType;<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>  /**<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * Set the read type for this scan.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * &lt;p&gt;<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * example, we will always use pread if this is a get scan.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   * @return this<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   */<a name="line.970"></a>
+<span class="sourceLineNo">971</span>  public Scan setReadType(ReadType readType) {<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    this.readType = readType;<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    return this;<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>  /**<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * Get the mvcc read point used to open a scanner.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  long getMvccReadPoint() {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    return mvccReadPoint;<a name="line.980"></a>
+<span class="sourceLineNo">981</span>  }<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>   * Set the mvcc read point used to open a scanner.<a name="line.984"></a>
 <span class="sourceLineNo">985</span>   */<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @Deprecated<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    return this;<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>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * @return the limit of rows for this scan<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
-<span class="sourceLineNo">995</span>  public int getLimit() {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    return limit;<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  }<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>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * reaches this value.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * &lt;p&gt;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @param limit the limit of rows for this scan<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @return this<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   */<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  public Scan setLimit(int limit) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    this.limit = limit;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    return this;<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>  /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>   * @return this<a name="line.1015"></a>
+<span class="sourceLineNo">986</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    return this;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>  }<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>   * Set the mvcc read point to -1 which means do not use it.<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   */<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  Scan resetMvccReadPoint() {<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    return setMvccReadPoint(-1L);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>  }<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>  /**<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   *<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * but users do not allow partial result.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   *<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * {@link Result#isCursor()}<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   * {@link Result#getCursor()}<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>   * {@link Cursor}<a name="line.1015"></a>
 <span class="sourceLineNo">1016</span>   */<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>  public Scan setOneRowLimit() {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    return setLimit(1).setReadType(ReadType.PREAD);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @InterfaceAudience.Public<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public enum ReadType {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    DEFAULT, STREAM, PREAD<a name="line.1023"></a>
+<span class="sourceLineNo">1017</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    this.needCursorResult = needCursorResult;<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    return this;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>  public boolean isNeedCursorResult() {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    return needCursorResult;<a name="line.1023"></a>
 <span class="sourceLineNo">1024</span>  }<a name="line.1024"></a>
 <span class="sourceLineNo">1025</span><a name="line.1025"></a>
 <span class="sourceLineNo">1026</span>  /**<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @return the read type for this scan<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   */<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>  public ReadType getReadType() {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    return readType;<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  }<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  /**<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * Set the read type for this scan.<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * &lt;p&gt;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   * example, we will always use pread if this is a get scan.<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * @return this<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   */<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  public Scan setReadType(ReadType readType) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.readType = readType;<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    return this;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  /**<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>   * Get the mvcc read point used to open a scanner.<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>   */<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  long getMvccReadPoint() {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    return mvccReadPoint;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  /**<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * Set the mvcc read point used to open a scanner.<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   */<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    return this;<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>  /**<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * Set the mvcc read point to -1 which means do not use it.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  Scan resetMvccReadPoint() {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    return setMvccReadPoint(-1L);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>  }<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>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   *<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>   *<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>   * but users do not allow partial result.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>   *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>   * {@link Result#isCursor()}<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   * {@link Result#getCursor()}<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   * {@link Cursor}<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   */<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    this.needCursorResult = needCursorResult;<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    return this;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span><a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public boolean isNeedCursorResult() {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    return needCursorResult;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>  }<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>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * {@link Result#isCursor()}<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * {@link Result#getCursor()}<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * {@link Cursor}<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>}<a name="line.1105"></a>
+<span class="sourceLineNo">1027</span>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * {@link Result#isCursor()}<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * {@link Result#getCursor()}<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   * {@link Cursor}<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   */<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>}<a name="line.1036"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
index 5fe1313..fe87f3a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
@@ -153,964 +153,895 @@
 <span class="sourceLineNo">145</span>  public static final boolean DEFAULT_HBASE_CLIENT_SCANNER_ASYNC_PREFETCH = false;<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
 <span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Set it true for small scan to get better performance Small scan should use pread and big scan<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * can use seek + read seek + read is fast but can cause two problem (1) resource contention (2)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * cause too much network io [89-fb] Using pread for non-compaction read request<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * https://issues.apache.org/jira/browse/HBASE-7266 On the other hand, if setting it true, we<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * would do openScanner,next,closeScanner in one RPC call. It means the better performance for<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * small scan. [HBASE-9488]. Generally, if the scan range is within one data block(64KB), it could<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * be considered as a small scan.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private boolean small = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * the mvcc is only valid within region scope.<a name="line.160"></a>
+<span class="sourceLineNo">148</span>   * The mvcc read point to use when open a scanner. Remember to clear it after switching regions as<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the mvcc is only valid within region scope.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private long mvccReadPoint = -1L;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * rows reaches this value.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int limit = -1;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Control whether to use pread at server side.<a name="line.160"></a>
 <span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private long mvccReadPoint = -1L;<a name="line.162"></a>
+<span class="sourceLineNo">162</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * The number of rows we want for this scan. We will terminate the scan if the number of return<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * rows reaches this value.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private int limit = -1;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Control whether to use pread at server side.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  private ReadType readType = ReadType.DEFAULT;<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  private boolean needCursorResult = false;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Create a Scan operation across all rows.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public Scan() {}<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  /**<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Creates a new instance of this class while copying all values.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param scan  The scan instance to copy from.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @throws IOException When copying the values fails.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public Scan(Scan scan) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    startRow = scan.getStartRow();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    includeStartRow = scan.includeStartRow();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    stopRow  = scan.getStopRow();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    includeStopRow = scan.includeStopRow();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    maxVersions = scan.getMaxVersions();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    batch = scan.getBatch();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    caching = scan.getCaching();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    maxResultSize = scan.getMaxResultSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    filter = scan.getFilter(); // clone?<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    consistency = scan.getConsistency();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    reversed = scan.isReversed();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    small = scan.isSmall();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      byte [] fam = entry.getKey();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (byte[] col : cols) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          addColumn(fam, col);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      } else {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        addFamily(fam);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      TimeRange tr = entry.getValue();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.limit = scan.getLimit();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    setPriority(scan.getPriority());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    readType = scan.getReadType();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    super.setReplicaId(scan.getReplicaId());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * Builds a scan object with the same specs as get.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param get get to model scan after<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public Scan(Get get) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    this.startRow = get.getRow();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.includeStartRow = true;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.stopRow = get.getRow();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.includeStopRow = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this.filter = get.getFilter();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    this.maxVersions = get.getMaxVersions();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    this.tr = get.getTimeRange();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.familyMap = get.getFamilyMap();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this.asyncPrefetch = false;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    this.consistency = get.getConsistency();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      TimeRange tr = entry.getValue();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.mvccReadPoint = -1L;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    setPriority(get.getPriority());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    super.setReplicaId(get.getReplicaId());<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>  public boolean isGetScan() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Get all columns from the specified family.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * &lt;p&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * Overrides previous calls to addColumn for this family.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param family family name<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @return this<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public Scan addFamily(byte [] family) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    familyMap.remove(family);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    familyMap.put(family, null);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return this;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Get the column from the specified family with the specified qualifier.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * &lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Overrides previous calls to addFamily for this family.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param family family name<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param qualifier column qualifier<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @return this<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if(set == null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      familyMap.put(family, set);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (qualifier == null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    set.add(qualifier);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return this;<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>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Get versions of columns only within the specified timestamp range,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * your time range spans more than one version and you want all versions<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * returned, up the number of versions beyond the default.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @see #readAllVersions()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @see #readVersions(int)<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return this<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return this;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * defaut.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param timestamp version timestamp<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @see #readAllVersions()<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @see #readVersions(int)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @return this<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *             Use {@link #setTimestamp(long)} instead<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Deprecated<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Scan setTimeStamp(long timestamp)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.setTimestamp(timestamp);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * defaut.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * @param timestamp version timestamp<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @see #readAllVersions()<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @see #readVersions(int)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  public Scan setTimestamp(long timestamp) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tr = TimeRange.at(timestamp);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } catch(Exception e) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throw e;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Set the start row of the scan.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;p&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * specified row.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param startRow row to start scanner at or after<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @return this<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Scan withStartRow(byte[] startRow) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return withStartRow(startRow, true);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Set the start row of the scan.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * &lt;p&gt;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * will start from the next closest row after the specified row.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * &lt;p&gt;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * &lt;/p&gt;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param startRow row to start scanner at or after<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param inclusive whether we should include the start row when scan<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @return this<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.startRow = startRow;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.includeStartRow = inclusive;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * Set the stop row of the scan.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * &lt;p&gt;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * &lt;/p&gt;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @param stopRow row to end at (exclusive)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return this<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return withStopRow(stopRow, false);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * Set the stop row of the scan.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * &lt;p&gt;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param stopRow row to end at<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @param inclusive whether we should include the stop row when scan<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @return this<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.436"></a>
+<span class="sourceLineNo">164</span>  private boolean needCursorResult = false;<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create a Scan operation across all rows.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Scan() {}<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Creates a new instance of this class while copying all values.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param scan  The scan instance to copy from.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @throws IOException When copying the values fails.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Scan(Scan scan) throws IOException {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    startRow = scan.getStartRow();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    includeStartRow = scan.includeStartRow();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    stopRow  = scan.getStopRow();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    includeStopRow = scan.includeStopRow();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    maxVersions = scan.getMaxVersions();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    batch = scan.getBatch();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    caching = scan.getCaching();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    maxResultSize = scan.getMaxResultSize();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cacheBlocks = scan.getCacheBlocks();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    filter = scan.getFilter(); // clone?<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    consistency = scan.getConsistency();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.setIsolationLevel(scan.getIsolationLevel());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    reversed = scan.isReversed();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    asyncPrefetch = scan.isAsyncPrefetch();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    allowPartialResults = scan.getAllowPartialResults();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    tr = scan.getTimeRange(); // TimeRange is immutable<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; fams = scan.getFamilyMap();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    for (Map.Entry&lt;byte[],NavigableSet&lt;byte[]&gt;&gt; entry : fams.entrySet()) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      byte [] fam = entry.getKey();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      NavigableSet&lt;byte[]&gt; cols = entry.getValue();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (cols != null &amp;&amp; cols.size() &gt; 0) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        for (byte[] col : cols) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          addColumn(fam, col);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        addFamily(fam);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    for (Map.Entry&lt;String, byte[]&gt; attr : scan.getAttributesMap().entrySet()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : scan.getColumnFamilyTimeRange().entrySet()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TimeRange tr = entry.getValue();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.mvccReadPoint = scan.getMvccReadPoint();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.limit = scan.getLimit();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.needCursorResult = scan.isNeedCursorResult();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    setPriority(scan.getPriority());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    readType = scan.getReadType();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    super.setReplicaId(scan.getReplicaId());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * Builds a scan object with the same specs as get.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param get get to model scan after<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public Scan(Get get) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    this.startRow = get.getRow();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    this.includeStartRow = true;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.stopRow = get.getRow();<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.includeStopRow = true;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this.filter = get.getFilter();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    this.cacheBlocks = get.getCacheBlocks();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    this.maxVersions = get.getMaxVersions();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.storeLimit = get.getMaxResultsPerColumnFamily();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.storeOffset = get.getRowOffsetPerColumnFamily();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.tr = get.getTimeRange();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.familyMap = get.getFamilyMap();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    this.asyncPrefetch = false;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.consistency = get.getConsistency();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.setIsolationLevel(get.getIsolationLevel());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.loadColumnFamiliesOnDemand = get.getLoadColumnFamiliesOnDemandValue();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    for (Map.Entry&lt;String, byte[]&gt; attr : get.getAttributesMap().entrySet()) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      setAttribute(attr.getKey(), attr.getValue());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Map.Entry&lt;byte[], TimeRange&gt; entry : get.getColumnFamilyTimeRange().entrySet()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      TimeRange tr = entry.getValue();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      setColumnFamilyTimeRange(entry.getKey(), tr.getMin(), tr.getMax());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.mvccReadPoint = -1L;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    setPriority(get.getPriority());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    super.setReplicaId(get.getReplicaId());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public boolean isGetScan() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return includeStartRow &amp;&amp; includeStopRow<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        &amp;&amp; ClientUtil.areScanStartRowAndStopRowEqual(this.startRow, this.stopRow);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<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>   * Get all columns from the specified family.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Overrides previous calls to addColumn for this family.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * @param family family name<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return this<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public Scan addFamily(byte [] family) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    familyMap.remove(family);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    familyMap.put(family, null);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return this;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * Get the column from the specified family with the specified qualifier.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * &lt;p&gt;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Overrides previous calls to addFamily for this family.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param family family name<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @param qualifier column qualifier<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * @return this<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public Scan addColumn(byte [] family, byte [] qualifier) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    NavigableSet&lt;byte []&gt; set = familyMap.get(family);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    if(set == null) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      set = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      familyMap.put(family, set);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (qualifier == null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      qualifier = HConstants.EMPTY_BYTE_ARRAY;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    set.add(qualifier);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * Get versions of columns only within the specified timestamp range,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * [minStamp, maxStamp).  Note, default maximum versions to return is 1.  If<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * your time range spans more than one version and you want all versions<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * returned, up the number of versions beyond the default.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @see #readAllVersions()<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see #readVersions(int)<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @return this<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public Scan setTimeRange(long minStamp, long maxStamp) throws IOException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    tr = TimeRange.between(minStamp, maxStamp);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * Get versions of columns with the specified timestamp. Note, default maximum<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * versions to return is 1.  If your time range spans more than one version<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * and you want all versions returned, up the number of versions beyond the<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * defaut.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param timestamp version timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @see #readAllVersions()<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #readVersions(int)<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @return this<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public Scan setTimestamp(long timestamp) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      tr = TimeRange.at(timestamp);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } catch(Exception e) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      // This should never happen, unless integer overflow or something extremely wrong...<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      LOG.error("TimeRange failed, likely caused by integer overflow. ", e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      throw e;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * Set the start row of the scan.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * If the specified row does not exist, the Scanner will start from the next closest row after the<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * specified row.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param startRow row to start scanner at or after<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @return this<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public Scan withStartRow(byte[] startRow) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    return withStartRow(startRow, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Set the start row of the scan.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * &lt;p&gt;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * If the specified row does not exist, or the {@code inclusive} is {@code false}, the Scanner<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * will start from the next closest row after the specified row.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * &lt;p&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * &lt;b&gt;Note:&lt;/b&gt; When use {@link #setRowPrefixFilter(byte[])}, the result might be unexpected.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * &lt;/p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @param startRow row to start scanner at or after<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @param inclusive whether we should include the start row when scan<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return this<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @throws IllegalArgumentException if startRow does not meet criteria for a row key (when length<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public Scan withStartRow(byte[] startRow, boolean inclusive) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (Bytes.len(startRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throw new IllegalArgumentException("startRow's length must be less than or equal to "<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    this.startRow = startRow;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    this.includeStartRow = inclusive;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    return this;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Set the stop row of the scan.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * &lt;p&gt;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * The scan will include rows that are lexicographically less than the provided stopRow.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * &lt;p&gt;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * &lt;b&gt;Note:&lt;/b&gt; When doing a filter for a rowKey &lt;u&gt;Prefix&lt;/u&gt; use<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * {@link #setRowPrefixFilter(byte[])}. The 'trailing 0' will not yield the desired result.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;/p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param stopRow row to end at (exclusive)<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return this<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public Scan withStopRow(byte[] stopRow) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return withStopRow(stopRow, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Set the stop row of the scan.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * &lt;p&gt;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * The scan will include rows that are lexicographically less than (or equal to if<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * {@code inclusive} is {@code true}) the provided stopRow.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param stopRow row to end at<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param inclusive whether we should include the stop row when scan<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return this<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   *           exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  public Scan withStopRow(byte[] stopRow, boolean inclusive) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (Bytes.len(stopRow) &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      throw new IllegalArgumentException("stopRow's length must be less than or equal to "<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          + HConstants.MAX_ROW_LENGTH + " to meet the criteria" + " for a row key.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.stopRow = stopRow;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    this.includeStopRow = inclusive;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return this;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return this<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *   The Result of this scan might contains : "111"<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  @Deprecated<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (rowPrefix == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    } else {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      this.withStartRow(rowPrefix);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.436"></a>
 <span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    this.stopRow = stopRow;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    this.includeStopRow = inclusive;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return this;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;Set a filter (using stopRow and startRow) so the result set only contains rows where the<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * rowKey starts with the specified prefix.&lt;/p&gt;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;This is a utility method that converts the desired rowPrefix into the appropriate values<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * for the startRow and stopRow to achieve the desired result.&lt;/p&gt;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * &lt;p&gt;This can safely be used in combination with setFilter.&lt;/p&gt;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * &lt;p&gt;&lt;b&gt;NOTE: Doing a {@link #withStartRow(byte[])} and/or {@link #withStopRow(byte[])}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * after this method will yield undefined results.&lt;/b&gt;&lt;/p&gt;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @param rowPrefix the prefix all rows must start with. (Set &lt;i&gt;null&lt;/i&gt; to remove the filter.)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @return this<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @deprecated since 3.0.0. The scan result might be unexpected in some cases.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   *   e.g. startRow : "112" and rowPrefixFilter : "11"<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   *   The Result of this scan might contains : "111"<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   *   This method implements the filter by setting startRow and stopRow,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   *   but does not take care of the scenario where startRow has been set.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  @Deprecated<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  public Scan setRowPrefixFilter(byte[] rowPrefix) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    if (rowPrefix == null) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      withStartRow(HConstants.EMPTY_START_ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      withStopRow(HConstants.EMPTY_END_ROW);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } else {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.withStartRow(rowPrefix);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.withStopRow(ClientUtil.calculateTheClosestNextRowKeyForPrefix(rowPrefix));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return this;<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>   * Get all available versions.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @return this<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  public Scan readAllVersions() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    return this;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Get up to the specified number of versions of each column.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param versions specified number of versions for each column<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @return this<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public Scan readVersions(int versions) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    this.maxVersions = versions;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return this;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param batch the maximum number of values<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public Scan setBatch(int batch) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      throw new IncompatibleFilterException(<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        "Cannot set batch on a scan using a filter" +<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        " that returns true for filter.hasFilterRow");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    this.batch = batch;<a name="line.505"></a>
+<span class="sourceLineNo">438</span>    return this;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * Get all available versions.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return this<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  public Scan readAllVersions() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    this.maxVersions = Integer.MAX_VALUE;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * Get up to the specified number of versions of each column.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @param versions specified number of versions for each column<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return this<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   */<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public Scan readVersions(int versions) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    this.maxVersions = versions;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return this;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<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>   * Set the maximum number of cells to return for each call to next(). Callers should be aware<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * that this is not equivalent to calling {@link #setAllowPartialResults(boolean)}.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * If you don't allow partial results, the number of cells in each Result must equal to your<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * batch setting unless it is the last Result for current row. So this method is helpful in paging<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * queries. If you just want to prevent OOM at client, use setAllowPartialResults(true) is better.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param batch the maximum number of values<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  public Scan setBatch(int batch) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    if (this.hasFilter() &amp;&amp; this.filter.hasFilterRow()) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      throw new IncompatibleFilterException(<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        "Cannot set batch on a scan using a filter" +<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        " that returns true for filter.hasFilterRow");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.batch = batch;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return this;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * Set the maximum number of values to return per row per Column Family<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param limit the maximum number of values returned / row / CF<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    this.storeLimit = limit;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return this;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * Set offset for the row per Column Family.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * @param offset is the number of kvs that will be skipped.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.storeOffset = offset;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return this;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * apply.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param caching the number of rows for caching<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
+<span class="sourceLineNo">504</span>  public Scan setCaching(int caching) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    this.caching = caching;<a name="line.505"></a>
 <span class="sourceLineNo">506</span>    return this;<a name="line.506"></a>
 <span class="sourceLineNo">507</span>  }<a name="line.507"></a>
 <span class="sourceLineNo">508</span><a name="line.508"></a>
 <span class="sourceLineNo">509</span>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * Set the maximum number of values to return per row per Column Family<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param limit the maximum number of values returned / row / CF<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public Scan setMaxResultsPerColumnFamily(int limit) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    this.storeLimit = limit;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    return this;<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>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * Set offset for the row per Column Family.<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param offset is the number of kvs that will be skipped.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  public Scan setRowOffsetPerColumnFamily(int offset) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    this.storeOffset = offset;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return this;<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>  /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * Set the number of rows for caching that will be passed to scanners.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * If not set, the Configuration setting {@link HConstants#HBASE_CLIENT_SCANNER_CACHING} will<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * apply.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Higher caching values will enable faster scanners but will use more memory.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param caching the number of rows for caching<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public Scan setCaching(int caching) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    this.caching = caching;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  public long getMaxResultSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    return maxResultSize;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>  /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * maximum result size will be set for this scan, and the global configured<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * value will be used instead. (Defaults to unlimited).<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   *<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    this.maxResultSize = maxResultSize;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this;<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>  @Override<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  public Scan setFilter(Filter filter) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    super.setFilter(filter);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return this;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  /**<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * Setting the familyMap<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param familyMap map of family to qualifier<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @return this<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    this.familyMap = familyMap;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return this;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * Getting the familyMap<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @return familyMap<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    return this.familyMap;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return the number of families in familyMap<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   */<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public int numFamilies() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    if(hasFamilies()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return this.familyMap.size();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    return 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @return true if familyMap is non empty, false otherwise<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public boolean hasFamilies() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return !this.familyMap.isEmpty();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  /**<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return the keys of the familyMap<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public byte[][] getFamilies() {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if(hasFamilies()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @return the startrow<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public byte [] getStartRow() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return this.startRow;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * @return if we should include start row when scan<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  public boolean includeStartRow() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return includeStartRow;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return the stoprow<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public byte[] getStopRow() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    return this.stopRow;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @return if we should include stop row when scan<a name="line.631"></a>
+<span class="sourceLineNo">510</span>   * @return the maximum result size in bytes. See {@link #setMaxResultSize(long)}<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  public long getMaxResultSize() {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return maxResultSize;<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<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>   * Set the maximum result size. The default is -1; this means that no specific<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * maximum result size will be set for this scan, and the global configured<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * value will be used instead. (Defaults to unlimited).<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param maxResultSize The maximum result size in bytes.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  public Scan setMaxResultSize(long maxResultSize) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    this.maxResultSize = maxResultSize;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public Scan setFilter(Filter filter) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    super.setFilter(filter);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return this;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * Setting the familyMap<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @param familyMap map of family to qualifier<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @return this<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Scan setFamilyMap(Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; familyMap) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    this.familyMap = familyMap;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    return this;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Getting the familyMap<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return familyMap<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public Map&lt;byte [], NavigableSet&lt;byte []&gt;&gt; getFamilyMap() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return this.familyMap;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * @return the number of families in familyMap<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   */<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  public int numFamilies() {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    if(hasFamilies()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return this.familyMap.size();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    return 0;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * @return true if familyMap is non empty, false otherwise<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  public boolean hasFamilies() {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return !this.familyMap.isEmpty();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span>   * @return the keys of the familyMap<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   */<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  public byte[][] getFamilies() {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    if(hasFamilies()) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      return this.familyMap.keySet().toArray(new byte[0][0]);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    return null;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return the startrow<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public byte [] getStartRow() {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    return this.startRow;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @return if we should include start row when scan<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public boolean includeStartRow() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return includeStartRow;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the stoprow<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public byte[] getStopRow() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return this.stopRow;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return if we should include stop row when scan<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public boolean includeStopRow() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return includeStopRow;<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>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @return the max number of versions to fetch<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  public int getMaxVersions() {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    return this.maxVersions;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @return maximum number of values to return for a single call to next()<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  public int getBatch() {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    return this.batch;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>  /**<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return maximum number of values to return per row per CF<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public int getMaxResultsPerColumnFamily() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return this.storeLimit;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Method for retrieving the scan's offset per row per column<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * family (#kvs to be skipped)<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * @return row offset<a name="line.631"></a>
 <span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean includeStopRow() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return includeStopRow;<a name="line.634"></a>
+<span class="sourceLineNo">633</span>  public int getRowOffsetPerColumnFamily() {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    return this.storeOffset;<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  }<a name="line.635"></a>
 <span class="sourceLineNo">636</span><a name="line.636"></a>
 <span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @return the max number of versions to fetch<a name="line.638"></a>
+<span class="sourceLineNo">638</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.638"></a>
 <span class="sourceLineNo">639</span>   */<a name="line.639"></a>
-<span class="sourceLineNo">640</span>  public int getMaxVersions() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    return this.maxVersions;<a name="line.641"></a>
+<span class="sourceLineNo">640</span>  public int getCaching() {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    return this.caching;<a name="line.641"></a>
 <span class="sourceLineNo">642</span>  }<a name="line.642"></a>
 <span class="sourceLineNo">643</span><a name="line.643"></a>
 <span class="sourceLineNo">644</span>  /**<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @return maximum number of values to return for a single call to next()<a name="line.645"></a>
+<span class="sourceLineNo">645</span>   * @return TimeRange<a name="line.645"></a>
 <span class="sourceLineNo">646</span>   */<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  public int getBatch() {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return this.batch;<a name="line.648"></a>
+<span class="sourceLineNo">647</span>  public TimeRange getTimeRange() {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return this.tr;<a name="line.648"></a>
 <span class="sourceLineNo">649</span>  }<a name="line.649"></a>
 <span class="sourceLineNo">650</span><a name="line.650"></a>
 <span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * @return maximum number of values to return per row per CF<a name="line.652"></a>
+<span class="sourceLineNo">652</span>   * @return RowFilter<a name="line.652"></a>
 <span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public int getMaxResultsPerColumnFamily() {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    return this.storeLimit;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * Method for retrieving the scan's offset per row per column<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * family (#kvs to be skipped)<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * @return row offset<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   */<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  public int getRowOffsetPerColumnFamily() {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    return this.storeOffset;<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>  /**<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * @return caching the number of rows fetched when calling next on a scanner<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   */<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  public int getCaching() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return this.caching;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  }<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>   * @return TimeRange<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public TimeRange getTimeRange() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return this.tr;<a name="line.678"></a>
+<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  public Filter getFilter() {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    return filter;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @return true is a filter has been specified, false if not<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
+<span class="sourceLineNo">662</span>  public boolean hasFilter() {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return filter != null;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<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>   * Set whether blocks should be cached for this Scan.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * This is true by default.  When true, default settings of the table and<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * family are used (this will never override caching blocks if the block<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * cache is disabled for that family or entirely).<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * will not be cached<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    this.cacheBlocks = cacheBlocks;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return this;<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>  /**<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   * @return RowFilter<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   */<a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Override<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public Filter getFilter() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return filter;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @return true is a filter has been specified, false if not<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean hasFilter() {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    return filter != null;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * Set whether blocks should be cached for this Scan.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   * &lt;p&gt;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * This is true by default.  When true, default settings of the table and<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * family are used (this will never override caching blocks if the block<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * cache is disabled for that family or entirely).<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * @param cacheBlocks if false, default settings are overridden and blocks<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * will not be cached<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public Scan setCacheBlocks(boolean cacheBlocks) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    this.cacheBlocks = cacheBlocks;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    return this;<a name="line.708"></a>
+<span class="sourceLineNo">682</span>   * Get whether blocks should be cached for this Scan.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @return true if default caching should be used, false if blocks should not<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   * be cached<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   */<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  public boolean getCacheBlocks() {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    return cacheBlocks;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * Set whether this scan is a reversed one<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * &lt;p&gt;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * This is false by default which means forward(normal) scan.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   *<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * @param reversed if true, scan will be backward order<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return this<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  public Scan setReversed(boolean reversed) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    this.reversed = reversed;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    return this;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">702</span><a name="line.702"></a>
+<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * Get whether this scan is a reversed one.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * @return true if backward scan, false if forward(default) scan<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReversed() {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    return reversed;<a name="line.708"></a>
 <span class="sourceLineNo">709</span>  }<a name="line.709"></a>
 <span class="sourceLineNo">710</span><a name="line.710"></a>
 <span class="sourceLineNo">711</span>  /**<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * Get whether blocks should be cached for this Scan.<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   * @return true if default caching should be used, false if blocks should not<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * be cached<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   */<a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public boolean getCacheBlocks() {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    return cacheBlocks;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * Set whether this scan is a reversed one<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * &lt;p&gt;<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * This is false by default which means forward(normal) scan.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   *<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * @param reversed if true, scan will be backward order<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * @return this<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  public Scan setReversed(boolean reversed) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    this.reversed = reversed;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    return this;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Get whether this scan is a reversed one.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @return true if backward scan, false if forward(default) scan<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  public boolean isReversed() {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    return reversed;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>  }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>  /**<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * By default this value is false and the complete results will be assembled client side<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * before being delivered to the caller.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param allowPartialResults<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return this<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @see #setBatch(int)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    this.allowPartialResults = allowPartialResults;<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return this;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   */<a name="line.760"></a>
-<span class="sourceLineNo">761</span>  public boolean getAllowPartialResults() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return allowPartialResults;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  @Override<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>  /**<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * Compile the table and column family (i.e. schema) information<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * logging, and administration tools.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @return Map<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   */<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  @Override<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    if(this.familyMap.isEmpty()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      map.put("families", "ALL");<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      return map;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      map.put("families", families);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        this.familyMap.entrySet()) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    return map;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  /**<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * Useful for debugging, logging, and administration tools.<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return Map<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  @Override<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    // start with the fingerpring map and build on top of it<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // map from families to column list replaces fingerprint's list of families<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    map.put("families", familyColumns);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // add scalar information first<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    map.put("maxVersions", this.maxVersions);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    map.put("batch", this.batch);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    map.put("caching", this.caching);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    timeRange.add(this.tr.getMin());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    timeRange.add(this.tr.getMax());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    map.put("timeRange", timeRange);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    int colCount = 0;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    // iterate through affected families and list out up to maxCols columns<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      this.familyMap.entrySet()) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      if(entry.getValue() == null) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        colCount++;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        --maxCols;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        columns.add("ALL");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      } else {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>        colCount += entry.getValue().size();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        if (maxCols &lt;= 0) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          continue;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>        for (byte [] column : entry.getValue()) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          if (--maxCols &lt;= 0) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>            continue;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          columns.add(Bytes.toStringBinary(column));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        }<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    map.put("totalColumns", colCount);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    if (this.filter != null) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      map.put("filter", this.filter.toString());<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    }<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    // add the id if set<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (getId() != null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      map.put("id", getId());<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return map;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Enable/disable "raw" mode for this scan.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * If "raw" is enabled the scan will return all<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * delete marker and deleted rows that have not<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * been collected, yet.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * This is mostly useful for Scan on column families<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * It is an error to specify any column when "raw" is set.<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  public Scan setRaw(boolean raw) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    return this;<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @return True if this Scan is in "raw" mode.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   */<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  public boolean isRaw() {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.874"></a>
+<span class="sourceLineNo">712</span>   * Setting whether the caller wants to see the partial results when server returns<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * less-than-expected cells. It is helpful while scanning a huge row to prevent OOM at client.<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * By default this value is false and the complete results will be assembled client side<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * before being delivered to the caller.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param allowPartialResults<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   * @return this<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @see Result#mayHaveMoreCellsInRow()<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   * @see #setBatch(int)<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  public Scan setAllowPartialResults(final boolean allowPartialResults) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    this.allowPartialResults = allowPartialResults;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    return this;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span>  /**<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @return true when the constructor of this scan understands that the results they will see may<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   *         only represent a partial portion of a row. The entire row would be retrieved by<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   *         subsequent calls to {@link ResultScanner#next()}<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public boolean getAllowPartialResults() {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    return allowPartialResults;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
+<span class="sourceLineNo">736</span>  public Scan setLoadColumnFamiliesOnDemand(boolean value) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    return (Scan) super.setLoadColumnFamiliesOnDemand(value);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Compile the table and column family (i.e. schema) information<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * into a String. Useful for parsing and aggregation by debugging,<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   * logging, and administration tools.<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   * @return Map<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Override<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    List&lt;String&gt; families = new ArrayList&lt;&gt;();<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    if(this.familyMap.isEmpty()) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      map.put("families", "ALL");<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      return map;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    } else {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      map.put("families", families);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    }<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        this.familyMap.entrySet()) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    return map;<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * Useful for debugging, logging, and administration tools.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @return Map<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  @Override<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    // start with the fingerpring map and build on top of it<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    // map from families to column list replaces fingerprint's list of families<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    Map&lt;String, List&lt;String&gt;&gt; familyColumns = new HashMap&lt;&gt;();<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    map.put("families", familyColumns);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    // add scalar information first<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    map.put("startRow", Bytes.toStringBinary(this.startRow));<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    map.put("stopRow", Bytes.toStringBinary(this.stopRow));<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    map.put("maxVersions", this.maxVersions);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    map.put("batch", this.batch);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    map.put("caching", this.caching);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    map.put("maxResultSize", this.maxResultSize);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    map.put("cacheBlocks", this.cacheBlocks);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    map.put("loadColumnFamiliesOnDemand", this.loadColumnFamiliesOnDemand);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    List&lt;Long&gt; timeRange = new ArrayList&lt;&gt;(2);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    timeRange.add(this.tr.getMin());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    timeRange.add(this.tr.getMax());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    map.put("timeRange", timeRange);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    int colCount = 0;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // iterate through affected families and list out up to maxCols columns<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    for (Map.Entry&lt;byte [], NavigableSet&lt;byte[]&gt;&gt; entry :<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      this.familyMap.entrySet()) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      List&lt;String&gt; columns = new ArrayList&lt;&gt;();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      familyColumns.put(Bytes.toStringBinary(entry.getKey()), columns);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      if(entry.getValue() == null) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        colCount++;<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        --maxCols;<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        columns.add("ALL");<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      } else {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        colCount += entry.getValue().size();<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        if (maxCols &lt;= 0) {<a name="line.802"></a>
+<span class="sourceLineNo">803</span>          continue;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        for (byte [] column : entry.getValue()) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>          if (--maxCols &lt;= 0) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>            continue;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          }<a name="line.808"></a>
+<span class="sourceLineNo">809</span>          columns.add(Bytes.toStringBinary(column));<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>    }<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    map.put("totalColumns", colCount);<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    if (this.filter != null) {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      map.put("filter", this.filter.toString());<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // add the id if set<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (getId() != null) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      map.put("id", getId());<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    return map;<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>  /**<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * Enable/disable "raw" mode for this scan.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * If "raw" is enabled the scan will return all<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * delete marker and deleted rows that have not<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * been collected, yet.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * This is mostly useful for Scan on column families<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * that have KEEP_DELETED_ROWS enabled.<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * It is an error to specify any column when "raw" is set.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @param raw True/False to enable/disable "raw" mode.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   */<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public Scan setRaw(boolean raw) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    setAttribute(RAW_ATTR, Bytes.toBytes(raw));<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    return this;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  }<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>   * @return True if this Scan is in "raw" mode.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   */<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  public boolean isRaw() {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    byte[] attr = getAttribute(RAW_ATTR);<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>  @Override<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    return (Scan) super.setAttribute(name, value);<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>  @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public Scan setId(String id) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    return (Scan) super.setId(id);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>  }<a name="line.860"></a>
+<span class="sourceLineNo">861</span><a name="line.861"></a>
+<span class="sourceLineNo">862</span>  @Override<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    return (Scan) super.setACL(perms);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
+<span class="sourceLineNo">866</span><a name="line.866"></a>
+<span class="sourceLineNo">867</span>  @Override<a name="line.867"></a>
+<span class="sourceLineNo">868</span>  public Scan setACL(String user, Permission perms) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    return (Scan) super.setACL(user, perms);<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>  @Override<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  public Scan setConsistency(Consistency consistency) {<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    return (Scan) super.setConsistency(consistency);<a name="line.874"></a>
 <span class="sourceLineNo">875</span>  }<a name="line.875"></a>
 <span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * Set whether this scan is a small scan<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Small scan should use pread and big scan can use seek + read seek + read is fast but can cause<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * two problem (1) resource contention (2) cause too much network io [89-fb] Using pread for<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * non-compaction read request https://issues.apache.org/jira/browse/HBASE-7266 On the other hand,<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * if setting it true, we would do openScanner,next,closeScanner in one RPC call. It means the<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * better performance for small scan. [HBASE-9488]. Generally, if the scan range is within one<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * data block(64KB), it could be considered as a small scan.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * @param small<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Use {@link #setLimit(int)} and<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   *   {@link #setReadType(ReadType)} instead. And for the one rpc optimization, now we will also<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   *   fetch data when openScanner, and if the number of rows reaches the limit then we will close<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   *   the scanner automatically which means we will fall back to one rpc.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @see #setLimit(int)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @see #setReadType(ReadType)<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  @Deprecated<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  public Scan setSmall(boolean small) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    this.small = small;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    if (small) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      this.readType = ReadType.PREAD;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return this;<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Get whether this scan is a small scan<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * @return true if small scan<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. See the comment of<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   *   {@link #setSmall(boolean)}<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-17045"&gt;HBASE-17045&lt;/a&gt;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   */<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  @Deprecated<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  public boolean isSmall() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    return small;<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>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public Scan setAttribute(String name, byte[] value) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return (Scan) super.setAttribute(name, value);<a name="line.918"></a>
-<span class="sourceLineNo">919</span>  }<a name="line.919"></a>
-<span class="sourceLineNo">920</span><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  @Override<a name="line.921"></a>
-<span class="sourceLineNo">922</span>  public Scan setId(String id) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    return (Scan) super.setId(id);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  @Override<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  public Scan setAuthorizations(Authorizations authorizations) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return (Scan) super.setAuthorizations(authorizations);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public Scan setACL(Map&lt;String, Permission&gt; perms) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    return (Scan) super.setACL(perms);<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>  @Override<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  public Scan setACL(String user, Permission perms) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    return (Scan) super.setACL(user, perms);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  @Override<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  public Scan setConsistency(Consistency consistency) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    return (Scan) super.setConsistency(consistency);<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Override<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  public Scan setReplicaId(int Id) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return (Scan) super.setReplicaId(Id);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    return (Scan) super.setIsolationLevel(level);<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>  @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  public Scan setPriority(int priority) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return (Scan) super.setPriority(priority);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return this;<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   */<a name="line.972"></a>
-<span class="sourceLineNo">973</span>  public boolean isScanMetricsEnabled() {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  public Boolean isAsyncPrefetch() {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return asyncPrefetch;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.984"></a>
+<span class="sourceLineNo">877</span>  @Override<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  public Scan setReplicaId(int Id) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    return (Scan) super.setReplicaId(Id);<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  }<a name="line.880"></a>
+<span class="sourceLineNo">881</span><a name="line.881"></a>
+<span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public Scan setIsolationLevel(IsolationLevel level) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    return (Scan) super.setIsolationLevel(level);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span>  @Override<a name="line.887"></a>
+<span class="sourceLineNo">888</span>  public Scan setPriority(int priority) {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    return (Scan) super.setPriority(priority);<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>  /**<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * Enable collection of {@link ScanMetrics}. For advanced users.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * @param enabled Set to true to enable accumulating scan metrics<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   */<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Scan setScanMetricsEnabled(final boolean enabled) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    setAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE, Bytes.toBytes(Boolean.valueOf(enabled)));<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    return this;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span>  /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   * @return True if collection of scan metrics is enabled. For advanced users.<a name="line.902"></a>
+<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
+<span class="sourceLineNo">904</span>  public boolean isScanMetricsEnabled() {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    byte[] attr = getAttribute(Scan.SCAN_ATTRIBUTES_METRICS_ENABLE);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    return attr == null ? false : Bytes.toBoolean(attr);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>  }<a name="line.907"></a>
+<span class="sourceLineNo">908</span><a name="line.908"></a>
+<span class="sourceLineNo">909</span>  public Boolean isAsyncPrefetch() {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    return asyncPrefetch;<a name="line.910"></a>
+<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
+<span class="sourceLineNo">912</span><a name="line.912"></a>
+<span class="sourceLineNo">913</span>  /**<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @deprecated Since 3.0.0, will be removed in 4.0.0. After building sync client upon async<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   *             client, the implementation is always 'async prefetch', so this flag is useless now.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   */<a name="line.916"></a>
+<span class="sourceLineNo">917</span>  @Deprecated<a name="line.917"></a>
+<span class="sourceLineNo">918</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    return this;<a name="line.920"></a>
+<span class="sourceLineNo">921</span>  }<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>   * @return the limit of rows for this scan<a name="line.924"></a>
+<span class="sourceLineNo">925</span>   */<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  public int getLimit() {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    return limit;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>  }<a name="line.928"></a>
+<span class="sourceLineNo">929</span><a name="line.929"></a>
+<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * reaches this value.<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * &lt;p&gt;<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @param limit the limit of rows for this scan<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @return this<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  public Scan setLimit(int limit) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    this.limit = limit;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    return this;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>  }<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>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @return this<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  public Scan setOneRowLimit() {<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    return setLimit(1).setReadType(ReadType.PREAD);<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>  @InterfaceAudience.Public<a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public enum ReadType {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    DEFAULT, STREAM, PREAD<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>  /**<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * @return the read type for this scan<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   */<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public ReadType getReadType() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    return readType;<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>  /**<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * Set the read type for this scan.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * &lt;p&gt;<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * example, we will always use pread if this is a get scan.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   * @return this<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   */<a name="line.970"></a>
+<span class="sourceLineNo">971</span>  public Scan setReadType(ReadType readType) {<a name="line.971"></a>
+<span class="sourceLineNo">972</span>    this.readType = readType;<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    return this;<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>  /**<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * Get the mvcc read point used to open a scanner.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  long getMvccReadPoint() {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    return mvccReadPoint;<a name="line.980"></a>
+<span class="sourceLineNo">981</span>  }<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>   * Set the mvcc read point used to open a scanner.<a name="line.984"></a>
 <span class="sourceLineNo">985</span>   */<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  @Deprecated<a name="line.986"></a>
-<span class="sourceLineNo">987</span>  public Scan setAsyncPrefetch(boolean asyncPrefetch) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    this.asyncPrefetch = asyncPrefetch;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    return this;<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>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * @return the limit of rows for this scan<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
-<span class="sourceLineNo">995</span>  public int getLimit() {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>    return limit;<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  }<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>   * Set the limit of rows for this scan. We will terminate the scan if the number of returned rows<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * reaches this value.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * &lt;p&gt;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * This condition will be tested at last, after all other conditions such as stopRow, filter, etc.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @param limit the limit of rows for this scan<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @return this<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   */<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  public Scan setLimit(int limit) {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    this.limit = limit;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    return this;<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>  /**<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>   * Call this when you only want to get one row. It will set {@code limit} to {@code 1}, and also<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>   * set {@code readType} to {@link ReadType#PREAD}.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>   * @return this<a name="line.1015"></a>
+<span class="sourceLineNo">986</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    return this;<a name="line.988"></a>
+<span class="sourceLineNo">989</span>  }<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>   * Set the mvcc read point to -1 which means do not use it.<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   */<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  Scan resetMvccReadPoint() {<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    return setMvccReadPoint(-1L);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>  }<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>  /**<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   *<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * but users do not allow partial result.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   *<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * {@link Result#isCursor()}<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   * {@link Result#getCursor()}<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>   * {@link Cursor}<a name="line.1015"></a>
 <span class="sourceLineNo">1016</span>   */<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>  public Scan setOneRowLimit() {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    return setLimit(1).setReadType(ReadType.PREAD);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @InterfaceAudience.Public<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public enum ReadType {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    DEFAULT, STREAM, PREAD<a name="line.1023"></a>
+<span class="sourceLineNo">1017</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    this.needCursorResult = needCursorResult;<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    return this;<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>  public boolean isNeedCursorResult() {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    return needCursorResult;<a name="line.1023"></a>
 <span class="sourceLineNo">1024</span>  }<a name="line.1024"></a>
 <span class="sourceLineNo">1025</span><a name="line.1025"></a>
 <span class="sourceLineNo">1026</span>  /**<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @return the read type for this scan<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   */<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>  public ReadType getReadType() {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    return readType;<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  }<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  /**<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * Set the read type for this scan.<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * &lt;p&gt;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * Notice that we may choose to use pread even if you specific {@link ReadType#STREAM} here. For<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   * example, we will always use pread if this is a get scan.<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * @return this<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   */<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  public Scan setReadType(ReadType readType) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    this.readType = readType;<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    return this;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  /**<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>   * Get the mvcc read point used to open a scanner.<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>   */<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  long getMvccReadPoint() {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    return mvccReadPoint;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  /**<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * Set the mvcc read point used to open a scanner.<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   */<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>  Scan setMvccReadPoint(long mvccReadPoint) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    this.mvccReadPoint = mvccReadPoint;<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    return this;<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>  /**<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * Set the mvcc read point to -1 which means do not use it.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  Scan resetMvccReadPoint() {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    return setMvccReadPoint(-1L);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>  }<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>   * When the server is slow or we scan a table with many deleted data or we use a sparse filter,<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * the server will response heartbeat to prevent timeout. However the scanner will return a Result<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * only when client can do it. So if there are many heartbeats, the blocking time on<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   * ResultScanner#next() may be very long, which is not friendly to online services.<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   *<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   * Set this to true then you can get a special Result whose #isCursor() returns true and is not<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>   * contains any real data. It only tells you where the server has scanned. You can call next<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   * to continue scanning or open a new scanner with this row key as start row whenever you want.<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>   *<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Users can get a cursor when and only when there is a response from the server but we can not<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   * return a Result to users, for example, this response is a heartbeat or there are partial cells<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>   * but users do not allow partial result.<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>   *<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>   * Now the cursor is in row level which means the special Result will only contains a row key.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>   * {@link Result#isCursor()}<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   * {@link Result#getCursor()}<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   * {@link Cursor}<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   */<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>  public Scan setNeedCursorResult(boolean needCursorResult) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    this.needCursorResult = needCursorResult;<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    return this;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span><a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public boolean isNeedCursorResult() {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    return needCursorResult;<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>  }<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>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * {@link Result#isCursor()}<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * {@link Result#getCursor()}<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * {@link Cursor}<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>}<a name="line.1105"></a>
+<span class="sourceLineNo">1027</span>   * Create a new Scan with a cursor. It only set the position information like start row key.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * The others (like cfs, stop row, limit) should still be filled in by the user.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * {@link Result#isCursor()}<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * {@link Result#getCursor()}<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   * {@link Cursor}<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   */<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>  public static Scan createScanFromCursor(Cursor cursor) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>    return new Scan().withStartRow(cursor.getRow());<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>}<a name="line.1036"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
index c3b14b7..27f5e8c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
@@ -90,328 +90,333 @@
 <span class="sourceLineNo">082</span>    // we end up calling l2Cache.getBlock.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    // We are not in a position to exactly look at LRU cache or BC as BlockType may not be getting<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    // passed always.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    return l1Cache.containsBlock(cacheKey)?<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics):<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching, boolean repeat,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      boolean updateCacheMetrics, BlockType blockType) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    if (blockType == null) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      return getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    boolean metaBlock = isMetaBlock(blockType);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    if (metaBlock) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } else {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      return l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return l1Cache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);<a name="line.106"></a>
+<span class="sourceLineNo">085</span>    boolean existInL1 = l1Cache.containsBlock(cacheKey);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (!existInL1 &amp;&amp; updateCacheMetrics &amp;&amp; !repeat) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      // If the block does not exist in L1, the containsBlock should be counted as one miss.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      l1Cache.getStats().miss(caching, cacheKey.isPrimary(), cacheKey.getBlockType());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return existInL1 ?<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics):<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching, boolean repeat,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      boolean updateCacheMetrics, BlockType blockType) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (blockType == null) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    boolean metaBlock = isMetaBlock(blockType);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    if (metaBlock) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      return l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    } else {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  }<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
 <span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public int evictBlocksByHfileName(String hfileName) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return l1Cache.evictBlocksByHfileName(hfileName)<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        + l2Cache.evictBlocksByHfileName(hfileName);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public CacheStats getStats() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return this.combinedCacheStats;<a name="line.117"></a>
+<span class="sourceLineNo">110</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    return l1Cache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public int evictBlocksByHfileName(String hfileName) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return l1Cache.evictBlocksByHfileName(hfileName)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        + l2Cache.evictBlocksByHfileName(hfileName);<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>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void shutdown() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    l1Cache.shutdown();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    l2Cache.shutdown();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public long size() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    return l1Cache.size() + l2Cache.size();<a name="line.128"></a>
+<span class="sourceLineNo">121</span>  public CacheStats getStats() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return this.combinedCacheStats;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public void shutdown() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    l1Cache.shutdown();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    l2Cache.shutdown();<a name="line.128"></a>
 <span class="sourceLineNo">129</span>  }<a name="line.129"></a>
 <span class="sourceLineNo">130</span><a name="line.130"></a>
 <span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public long getMaxSize() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return l1Cache.getMaxSize() + l2Cache.getMaxSize();<a name="line.133"></a>
+<span class="sourceLineNo">132</span>  public long size() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return l1Cache.size() + l2Cache.size();<a name="line.133"></a>
 <span class="sourceLineNo">134</span>  }<a name="line.134"></a>
 <span class="sourceLineNo">135</span><a name="line.135"></a>
 <span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public long getCurrentDataSize() {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return l1Cache.getCurrentDataSize() + l2Cache.getCurrentDataSize();<a name="line.138"></a>
+<span class="sourceLineNo">137</span>  public long getMaxSize() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return l1Cache.getMaxSize() + l2Cache.getMaxSize();<a name="line.138"></a>
 <span class="sourceLineNo">139</span>  }<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  public long getFreeSize() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return l1Cache.getFreeSize() + l2Cache.getFreeSize();<a name="line.143"></a>
+<span class="sourceLineNo">142</span>  public long getCurrentDataSize() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return l1Cache.getCurrentDataSize() + l2Cache.getCurrentDataSize();<a name="line.143"></a>
 <span class="sourceLineNo">144</span>  }<a name="line.144"></a>
 <span class="sourceLineNo">145</span><a name="line.145"></a>
 <span class="sourceLineNo">146</span>  @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public long getCurrentSize() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    return l1Cache.getCurrentSize() + l2Cache.getCurrentSize();<a name="line.148"></a>
+<span class="sourceLineNo">147</span>  public long getFreeSize() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return l1Cache.getFreeSize() + l2Cache.getFreeSize();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span><a name="line.150"></a>
 <span class="sourceLineNo">151</span>  @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public long getBlockCount() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    return l1Cache.getBlockCount() + l2Cache.getBlockCount();<a name="line.153"></a>
+<span class="sourceLineNo">152</span>  public long getCurrentSize() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return l1Cache.getCurrentSize() + l2Cache.getCurrentSize();<a name="line.153"></a>
 <span class="sourceLineNo">154</span>  }<a name="line.154"></a>
 <span class="sourceLineNo">155</span><a name="line.155"></a>
 <span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public long getDataBlockCount() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return l1Cache.getDataBlockCount() + l2Cache.getDataBlockCount();<a name="line.158"></a>
+<span class="sourceLineNo">157</span>  public long getBlockCount() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    return l1Cache.getBlockCount() + l2Cache.getBlockCount();<a name="line.158"></a>
 <span class="sourceLineNo">159</span>  }<a name="line.159"></a>
 <span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public static class CombinedCacheStats extends CacheStats {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    private final CacheStats lruCacheStats;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    private final CacheStats bucketCacheStats;<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    CombinedCacheStats(CacheStats lbcStats, CacheStats fcStats) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      super("CombinedBlockCache");<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      this.lruCacheStats = lbcStats;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      this.bucketCacheStats = fcStats;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public CacheStats getLruCacheStats() {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return this.lruCacheStats;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    public CacheStats getBucketCacheStats() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return this.bucketCacheStats;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    @Override<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public long getDataMissCount() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return lruCacheStats.getDataMissCount() + bucketCacheStats.getDataMissCount();<a name="line.181"></a>
+<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public long getDataBlockCount() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return l1Cache.getDataBlockCount() + l2Cache.getDataBlockCount();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public static class CombinedCacheStats extends CacheStats {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    private final CacheStats lruCacheStats;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    private final CacheStats bucketCacheStats;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    CombinedCacheStats(CacheStats lbcStats, CacheStats fcStats) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      super("CombinedBlockCache");<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      this.lruCacheStats = lbcStats;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      this.bucketCacheStats = fcStats;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public CacheStats getLruCacheStats() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return this.lruCacheStats;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public CacheStats getBucketCacheStats() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return this.bucketCacheStats;<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    }<a name="line.182"></a>
 <span class="sourceLineNo">183</span><a name="line.183"></a>
 <span class="sourceLineNo">184</span>    @Override<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public long getLeafIndexMissCount() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return lruCacheStats.getLeafIndexMissCount() + bucketCacheStats.getLeafIndexMissCount();<a name="line.186"></a>
+<span class="sourceLineNo">185</span>    public long getDataMissCount() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return lruCacheStats.getDataMissCount() + bucketCacheStats.getDataMissCount();<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    }<a name="line.187"></a>
 <span class="sourceLineNo">188</span><a name="line.188"></a>
 <span class="sourceLineNo">189</span>    @Override<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getBloomChunkMissCount() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return lruCacheStats.getBloomChunkMissCount() + bucketCacheStats.getBloomChunkMissCount();<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    public long getLeafIndexMissCount() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return lruCacheStats.getLeafIndexMissCount() + bucketCacheStats.getLeafIndexMissCount();<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    }<a name="line.192"></a>
 <span class="sourceLineNo">193</span><a name="line.193"></a>
 <span class="sourceLineNo">194</span>    @Override<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public long getMetaMissCount() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return lruCacheStats.getMetaMissCount() + bucketCacheStats.getMetaMissCount();<a name="line.196"></a>
+<span class="sourceLineNo">195</span>    public long getBloomChunkMissCount() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return lruCacheStats.getBloomChunkMissCount() + bucketCacheStats.getBloomChunkMissCount();<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    public long getRootIndexMissCount() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      return lruCacheStats.getRootIndexMissCount() + bucketCacheStats.getRootIndexMissCount();<a name="line.201"></a>
+<span class="sourceLineNo">200</span>    public long getMetaMissCount() {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return lruCacheStats.getMetaMissCount() + bucketCacheStats.getMetaMissCount();<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
 <span class="sourceLineNo">203</span><a name="line.203"></a>
 <span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public long getIntermediateIndexMissCount() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return lruCacheStats.getIntermediateIndexMissCount() +<a name="line.206"></a>
-<span class="sourceLineNo">207</span>          bucketCacheStats.getIntermediateIndexMissCount();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public long getFileInfoMissCount() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return lruCacheStats.getFileInfoMissCount() + bucketCacheStats.getFileInfoMissCount();<a name="line.212"></a>
+<span class="sourceLineNo">205</span>    public long getRootIndexMissCount() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return lruCacheStats.getRootIndexMissCount() + bucketCacheStats.getRootIndexMissCount();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getIntermediateIndexMissCount() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return lruCacheStats.getIntermediateIndexMissCount() +<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          bucketCacheStats.getIntermediateIndexMissCount();<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
 <span class="sourceLineNo">214</span><a name="line.214"></a>
 <span class="sourceLineNo">215</span>    @Override<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public long getGeneralBloomMetaMissCount() {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      return lruCacheStats.getGeneralBloomMetaMissCount() +<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          bucketCacheStats.getGeneralBloomMetaMissCount();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    @Override<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public long getDeleteFamilyBloomMissCount() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return lruCacheStats.getDeleteFamilyBloomMissCount() +<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          bucketCacheStats.getDeleteFamilyBloomMissCount();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public long getTrailerMissCount() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return lruCacheStats.getTrailerMissCount() + bucketCacheStats.getTrailerMissCount();<a name="line.229"></a>
+<span class="sourceLineNo">216</span>    public long getFileInfoMissCount() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      return lruCacheStats.getFileInfoMissCount() + bucketCacheStats.getFileInfoMissCount();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public long getGeneralBloomMetaMissCount() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return lruCacheStats.getGeneralBloomMetaMissCount() +<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          bucketCacheStats.getGeneralBloomMetaMissCount();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    @Override<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public long getDeleteFamilyBloomMissCount() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return lruCacheStats.getDeleteFamilyBloomMissCount() +<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          bucketCacheStats.getDeleteFamilyBloomMissCount();<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
 <span class="sourceLineNo">231</span><a name="line.231"></a>
 <span class="sourceLineNo">232</span>    @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    public long getDataHitCount() {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return lruCacheStats.getDataHitCount() + bucketCacheStats.getDataHitCount();<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    public long getTrailerMissCount() {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return lruCacheStats.getTrailerMissCount() + bucketCacheStats.getTrailerMissCount();<a name="line.234"></a>
 <span class="sourceLineNo">235</span>    }<a name="line.235"></a>
 <span class="sourceLineNo">236</span><a name="line.236"></a>
 <span class="sourceLineNo">237</span>    @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    public long getLeafIndexHitCount() {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return lruCacheStats.getLeafIndexHitCount() + bucketCacheStats.getLeafIndexHitCount();<a name="line.239"></a>
+<span class="sourceLineNo">238</span>    public long getDataHitCount() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return lruCacheStats.getDataHitCount() + bucketCacheStats.getDataHitCount();<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
 <span class="sourceLineNo">241</span><a name="line.241"></a>
 <span class="sourceLineNo">242</span>    @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    public long getBloomChunkHitCount() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return lruCacheStats.getBloomChunkHitCount() + bucketCacheStats.getBloomChunkHitCount();<a name="line.244"></a>
+<span class="sourceLineNo">243</span>    public long getLeafIndexHitCount() {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      return lruCacheStats.getLeafIndexHitCount() + bucketCacheStats.getLeafIndexHitCount();<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span><a name="line.246"></a>
 <span class="sourceLineNo">247</span>    @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public long getMetaHitCount() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      return lruCacheStats.getMetaHitCount() + bucketCacheStats.getMetaHitCount();<a name="line.249"></a>
+<span class="sourceLineNo">248</span>    public long getBloomChunkHitCount() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return lruCacheStats.getBloomChunkHitCount() + bucketCacheStats.getBloomChunkHitCount();<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    }<a name="line.250"></a>
 <span class="sourceLineNo">251</span><a name="line.251"></a>
 <span class="sourceLineNo">252</span>    @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public long getRootIndexHitCount() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      return lruCacheStats.getRootIndexHitCount() + bucketCacheStats.getRootIndexHitCount();<a name="line.254"></a>
+<span class="sourceLineNo">253</span>    public long getMetaHitCount() {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      return lruCacheStats.getMetaHitCount() + bucketCacheStats.getMetaHitCount();<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    }<a name="line.255"></a>
 <span class="sourceLineNo">256</span><a name="line.256"></a>
 <span class="sourceLineNo">257</span>    @Override<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    public long getIntermediateIndexHitCount() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      return lruCacheStats.getIntermediateIndexHitCount() +<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          bucketCacheStats.getIntermediateIndexHitCount();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public long getFileInfoHitCount() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return lruCacheStats.getFileInfoHitCount() + bucketCacheStats.getFileInfoHitCount();<a name="line.265"></a>
+<span class="sourceLineNo">258</span>    public long getRootIndexHitCount() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return lruCacheStats.getRootIndexHitCount() + bucketCacheStats.getRootIndexHitCount();<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>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public long getIntermediateIndexHitCount() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      return lruCacheStats.getIntermediateIndexHitCount() +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          bucketCacheStats.getIntermediateIndexHitCount();<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>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public long getGeneralBloomMetaHitCount() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return lruCacheStats.getGeneralBloomMetaHitCount() +<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          bucketCacheStats.getGeneralBloomMetaHitCount();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    @Override<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public long getDeleteFamilyBloomHitCount() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return lruCacheStats.getDeleteFamilyBloomHitCount() +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          bucketCacheStats.getDeleteFamilyBloomHitCount();<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public long getTrailerHitCount() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return lruCacheStats.getTrailerHitCount() + bucketCacheStats.getTrailerHitCount();<a name="line.282"></a>
+<span class="sourceLineNo">269</span>    public long getFileInfoHitCount() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      return lruCacheStats.getFileInfoHitCount() + bucketCacheStats.getFileInfoHitCount();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    public long getGeneralBloomMetaHitCount() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return lruCacheStats.getGeneralBloomMetaHitCount() +<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          bucketCacheStats.getGeneralBloomMetaHitCount();<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>    @Override<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    public long getDeleteFamilyBloomHitCount() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return lruCacheStats.getDeleteFamilyBloomHitCount() +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          bucketCacheStats.getDeleteFamilyBloomHitCount();<a name="line.282"></a>
 <span class="sourceLineNo">283</span>    }<a name="line.283"></a>
 <span class="sourceLineNo">284</span><a name="line.284"></a>
 <span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public long getRequestCount() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return lruCacheStats.getRequestCount()<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          + bucketCacheStats.getRequestCount();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    @Override<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    public long getRequestCachingCount() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return lruCacheStats.getRequestCachingCount()<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          + bucketCacheStats.getRequestCachingCount();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public long getMissCount() {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return lruCacheStats.getMissCount() + bucketCacheStats.getMissCount();<a name="line.299"></a>
+<span class="sourceLineNo">286</span>    public long getTrailerHitCount() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return lruCacheStats.getTrailerHitCount() + bucketCacheStats.getTrailerHitCount();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public long getRequestCount() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return lruCacheStats.getRequestCount()<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          + bucketCacheStats.getRequestCount();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    public long getRequestCachingCount() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return lruCacheStats.getRequestCachingCount()<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          + bucketCacheStats.getRequestCachingCount();<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    }<a name="line.300"></a>
 <span class="sourceLineNo">301</span><a name="line.301"></a>
 <span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public long getPrimaryMissCount() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      return lruCacheStats.getPrimaryMissCount() + bucketCacheStats.getPrimaryMissCount();<a name="line.304"></a>
+<span class="sourceLineNo">303</span>    public long getMissCount() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return lruCacheStats.getMissCount() + bucketCacheStats.getMissCount();<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>    @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    public long getMissCachingCount() {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      return lruCacheStats.getMissCachingCount()<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          + bucketCacheStats.getMissCachingCount();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    public long getHitCount() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      return lruCacheStats.getHitCount() + bucketCacheStats.getHitCount();<a name="line.315"></a>
+<span class="sourceLineNo">308</span>    public long getPrimaryMissCount() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      return lruCacheStats.getPrimaryMissCount() + bucketCacheStats.getPrimaryMissCount();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    public long getMissCachingCount() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      return lruCacheStats.getMissCachingCount()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          + bucketCacheStats.getMissCachingCount();<a name="line.315"></a>
 <span class="sourceLineNo">316</span>    }<a name="line.316"></a>
 <span class="sourceLineNo">317</span><a name="line.317"></a>
 <span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    public long getPrimaryHitCount() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      return lruCacheStats.getPrimaryHitCount() + bucketCacheStats.getPrimaryHitCount();<a name="line.320"></a>
+<span class="sourceLineNo">319</span>    public long getHitCount() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return lruCacheStats.getHitCount() + bucketCacheStats.getHitCount();<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    public long getHitCachingCount() {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      return lruCacheStats.getHitCachingCount()<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          + bucketCacheStats.getHitCachingCount();<a name="line.325"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    public long getPrimaryHitCount() {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      return lruCacheStats.getPrimaryHitCount() + bucketCacheStats.getPrimaryHitCount();<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public long getEvictionCount() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return lruCacheStats.getEvictionCount()<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          + bucketCacheStats.getEvictionCount();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public long getEvictedCount() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return lruCacheStats.getEvictedCount()<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          + bucketCacheStats.getEvictedCount();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public long getPrimaryEvictedCount() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return lruCacheStats.getPrimaryEvictedCount()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          + bucketCacheStats.getPrimaryEvictedCount();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void rollMetricsPeriod() {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      lruCacheStats.rollMetricsPeriod();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    public long getFailedInserts() {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.354"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public long getHitCachingCount() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return lruCacheStats.getHitCachingCount()<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          + bucketCacheStats.getHitCachingCount();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public long getEvictionCount() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return lruCacheStats.getEvictionCount()<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + bucketCacheStats.getEvictionCount();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public long getEvictedCount() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return lruCacheStats.getEvictedCount()<a name="line.341"></a>
+<span class="sourceLineNo">342</span>          + bucketCacheStats.getEvictedCount();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public long getPrimaryEvictedCount() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return lruCacheStats.getPrimaryEvictedCount()<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          + bucketCacheStats.getPrimaryEvictedCount();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public void rollMetricsPeriod() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      lruCacheStats.rollMetricsPeriod();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.354"></a>
 <span class="sourceLineNo">355</span>    }<a name="line.355"></a>
 <span class="sourceLineNo">356</span><a name="line.356"></a>
 <span class="sourceLineNo">357</span>    @Override<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    public long getSumHitCountsPastNPeriods() {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.359"></a>
-<span class="sourceLineNo">360</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.384"></a>
+<span class="sourceLineNo">358</span>    public long getFailedInserts() {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>    @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    public long getSumHitCountsPastNPeriods() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>    @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<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><a name="line.386"></a>
 <span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  public BlockCache[] getBlockCaches() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return new BlockCache [] {this.l1Cache, this.l2Cache};<a name="line.389"></a>
+<span class="sourceLineNo">388</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.389"></a>
 <span class="sourceLineNo">390</span>  }<a name="line.390"></a>
 <span class="sourceLineNo">391</span><a name="line.391"></a>
 <span class="sourceLineNo">392</span>  @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public void setMaxSize(long size) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    this.l1Cache.setMaxSize(size);<a name="line.394"></a>
+<span class="sourceLineNo">393</span>  public BlockCache[] getBlockCaches() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return new BlockCache [] {this.l1Cache, this.l2Cache};<a name="line.394"></a>
 <span class="sourceLineNo">395</span>  }<a name="line.395"></a>
 <span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public int getRpcRefCount(BlockCacheKey cacheKey) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return (this.l2Cache instanceof BucketCache)<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        ? ((BucketCache) this.l2Cache).getRpcRefCount(cacheKey)<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        : 0;<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>  public FirstLevelBlockCache getFirstLevelCache() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return l1Cache;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>}<a name="line.406"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void setMaxSize(long size) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    this.l1Cache.setMaxSize(size);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public int getRpcRefCount(BlockCacheKey cacheKey) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    return (this.l2Cache instanceof BucketCache)<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        ? ((BucketCache) this.l2Cache).getRpcRefCount(cacheKey)<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        : 0;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>  public FirstLevelBlockCache getFirstLevelCache() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    return l1Cache;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>}<a name="line.411"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
index c3b14b7..27f5e8c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
@@ -90,328 +90,333 @@
 <span class="sourceLineNo">082</span>    // we end up calling l2Cache.getBlock.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    // We are not in a position to exactly look at LRU cache or BC as BlockType may not be getting<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    // passed always.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    return l1Cache.containsBlock(cacheKey)?<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics):<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching, boolean repeat,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      boolean updateCacheMetrics, BlockType blockType) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    if (blockType == null) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      return getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    boolean metaBlock = isMetaBlock(blockType);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    if (metaBlock) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } else {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      return l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return l1Cache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);<a name="line.106"></a>
+<span class="sourceLineNo">085</span>    boolean existInL1 = l1Cache.containsBlock(cacheKey);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (!existInL1 &amp;&amp; updateCacheMetrics &amp;&amp; !repeat) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      // If the block does not exist in L1, the containsBlock should be counted as one miss.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      l1Cache.getStats().miss(caching, cacheKey.isPrimary(), cacheKey.getBlockType());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return existInL1 ?<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics):<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching, boolean repeat,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      boolean updateCacheMetrics, BlockType blockType) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (blockType == null) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    boolean metaBlock = isMetaBlock(blockType);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    if (metaBlock) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      return l1Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    } else {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  }<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
 <span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public int evictBlocksByHfileName(String hfileName) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return l1Cache.evictBlocksByHfileName(hfileName)<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        + l2Cache.evictBlocksByHfileName(hfileName);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public CacheStats getStats() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return this.combinedCacheStats;<a name="line.117"></a>
+<span class="sourceLineNo">110</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    return l1Cache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public int evictBlocksByHfileName(String hfileName) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return l1Cache.evictBlocksByHfileName(hfileName)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        + l2Cache.evictBlocksByHfileName(hfileName);<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>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void shutdown() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    l1Cache.shutdown();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    l2Cache.shutdown();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public long size() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    return l1Cache.size() + l2Cache.size();<a name="line.128"></a>
+<span class="sourceLineNo">121</span>  public CacheStats getStats() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return this.combinedCacheStats;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public void shutdown() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    l1Cache.shutdown();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    l2Cache.shutdown();<a name="line.128"></a>
 <span class="sourceLineNo">129</span>  }<a name="line.129"></a>
 <span class="sourceLineNo">130</span><a name="line.130"></a>
 <span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public long getMaxSize() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return l1Cache.getMaxSize() + l2Cache.getMaxSize();<a name="line.133"></a>
+<span class="sourceLineNo">132</span>  public long size() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return l1Cache.size() + l2Cache.size();<a name="line.133"></a>
 <span class="sourceLineNo">134</span>  }<a name="line.134"></a>
 <span class="sourceLineNo">135</span><a name="line.135"></a>
 <span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public long getCurrentDataSize() {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return l1Cache.getCurrentDataSize() + l2Cache.getCurrentDataSize();<a name="line.138"></a>
+<span class="sourceLineNo">137</span>  public long getMaxSize() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return l1Cache.getMaxSize() + l2Cache.getMaxSize();<a name="line.138"></a>
 <span class="sourceLineNo">139</span>  }<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  public long getFreeSize() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return l1Cache.getFreeSize() + l2Cache.getFreeSize();<a name="line.143"></a>
+<span class="sourceLineNo">142</span>  public long getCurrentDataSize() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return l1Cache.getCurrentDataSize() + l2Cache.getCurrentDataSize();<a name="line.143"></a>
 <span class="sourceLineNo">144</span>  }<a name="line.144"></a>
 <span class="sourceLineNo">145</span><a name="line.145"></a>
 <span class="sourceLineNo">146</span>  @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public long getCurrentSize() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    return l1Cache.getCurrentSize() + l2Cache.getCurrentSize();<a name="line.148"></a>
+<span class="sourceLineNo">147</span>  public long getFreeSize() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return l1Cache.getFreeSize() + l2Cache.getFreeSize();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span><a name="line.150"></a>
 <span class="sourceLineNo">151</span>  @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public long getBlockCount() {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    return l1Cache.getBlockCount() + l2Cache.getBlockCount();<a name="line.153"></a>
+<span class="sourceLineNo">152</span>  public long getCurrentSize() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return l1Cache.getCurrentSize() + l2Cache.getCurrentSize();<a name="line.153"></a>
 <span class="sourceLineNo">154</span>  }<a name="line.154"></a>
 <span class="sourceLineNo">155</span><a name="line.155"></a>
 <span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public long getDataBlockCount() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return l1Cache.getDataBlockCount() + l2Cache.getDataBlockCount();<a name="line.158"></a>
+<span class="sourceLineNo">157</span>  public long getBlockCount() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    return l1Cache.getBlockCount() + l2Cache.getBlockCount();<a name="line.158"></a>
 <span class="sourceLineNo">159</span>  }<a name="line.159"></a>
 <span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public static class CombinedCacheStats extends CacheStats {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    private final CacheStats lruCacheStats;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    private final CacheStats bucketCacheStats;<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    CombinedCacheStats(CacheStats lbcStats, CacheStats fcStats) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      super("CombinedBlockCache");<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      this.lruCacheStats = lbcStats;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      this.bucketCacheStats = fcStats;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public CacheStats getLruCacheStats() {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return this.lruCacheStats;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    public CacheStats getBucketCacheStats() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return this.bucketCacheStats;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    @Override<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public long getDataMissCount() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return lruCacheStats.getDataMissCount() + bucketCacheStats.getDataMissCount();<a name="line.181"></a>
+<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public long getDataBlockCount() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return l1Cache.getDataBlockCount() + l2Cache.getDataBlockCount();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public static class CombinedCacheStats extends CacheStats {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    private final CacheStats lruCacheStats;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    private final CacheStats bucketCacheStats;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    CombinedCacheStats(CacheStats lbcStats, CacheStats fcStats) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      super("CombinedBlockCache");<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      this.lruCacheStats = lbcStats;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      this.bucketCacheStats = fcStats;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public CacheStats getLruCacheStats() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return this.lruCacheStats;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public CacheStats getBucketCacheStats() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return this.bucketCacheStats;<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    }<a name="line.182"></a>
 <span class="sourceLineNo">183</span><a name="line.183"></a>
 <span class="sourceLineNo">184</span>    @Override<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    public long getLeafIndexMissCount() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return lruCacheStats.getLeafIndexMissCount() + bucketCacheStats.getLeafIndexMissCount();<a name="line.186"></a>
+<span class="sourceLineNo">185</span>    public long getDataMissCount() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return lruCacheStats.getDataMissCount() + bucketCacheStats.getDataMissCount();<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    }<a name="line.187"></a>
 <span class="sourceLineNo">188</span><a name="line.188"></a>
 <span class="sourceLineNo">189</span>    @Override<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getBloomChunkMissCount() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return lruCacheStats.getBloomChunkMissCount() + bucketCacheStats.getBloomChunkMissCount();<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    public long getLeafIndexMissCount() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return lruCacheStats.getLeafIndexMissCount() + bucketCacheStats.getLeafIndexMissCount();<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    }<a name="line.192"></a>
 <span class="sourceLineNo">193</span><a name="line.193"></a>
 <span class="sourceLineNo">194</span>    @Override<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    public long getMetaMissCount() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return lruCacheStats.getMetaMissCount() + bucketCacheStats.getMetaMissCount();<a name="line.196"></a>
+<span class="sourceLineNo">195</span>    public long getBloomChunkMissCount() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return lruCacheStats.getBloomChunkMissCount() + bucketCacheStats.getBloomChunkMissCount();<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    public long getRootIndexMissCount() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      return lruCacheStats.getRootIndexMissCount() + bucketCacheStats.getRootIndexMissCount();<a name="line.201"></a>
+<span class="sourceLineNo">200</span>    public long getMetaMissCount() {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return lruCacheStats.getMetaMissCount() + bucketCacheStats.getMetaMissCount();<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
 <span class="sourceLineNo">203</span><a name="line.203"></a>
 <span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public long getIntermediateIndexMissCount() {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return lruCacheStats.getIntermediateIndexMissCount() +<a name="line.206"></a>
-<span class="sourceLineNo">207</span>          bucketCacheStats.getIntermediateIndexMissCount();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public long getFileInfoMissCount() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return lruCacheStats.getFileInfoMissCount() + bucketCacheStats.getFileInfoMissCount();<a name="line.212"></a>
+<span class="sourceLineNo">205</span>    public long getRootIndexMissCount() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return lruCacheStats.getRootIndexMissCount() + bucketCacheStats.getRootIndexMissCount();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getIntermediateIndexMissCount() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return lruCacheStats.getIntermediateIndexMissCount() +<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          bucketCacheStats.getIntermediateIndexMissCount();<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
 <span class="sourceLineNo">214</span><a name="line.214"></a>
 <span class="sourceLineNo">215</span>    @Override<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public long getGeneralBloomMetaMissCount() {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      return lruCacheStats.getGeneralBloomMetaMissCount() +<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          bucketCacheStats.getGeneralBloomMetaMissCount();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    @Override<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public long getDeleteFamilyBloomMissCount() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return lruCacheStats.getDeleteFamilyBloomMissCount() +<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          bucketCacheStats.getDeleteFamilyBloomMissCount();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>    @Override<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    public long getTrailerMissCount() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return lruCacheStats.getTrailerMissCount() + bucketCacheStats.getTrailerMissCount();<a name="line.229"></a>
+<span class="sourceLineNo">216</span>    public long getFileInfoMissCount() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      return lruCacheStats.getFileInfoMissCount() + bucketCacheStats.getFileInfoMissCount();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public long getGeneralBloomMetaMissCount() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return lruCacheStats.getGeneralBloomMetaMissCount() +<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          bucketCacheStats.getGeneralBloomMetaMissCount();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    @Override<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public long getDeleteFamilyBloomMissCount() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return lruCacheStats.getDeleteFamilyBloomMissCount() +<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          bucketCacheStats.getDeleteFamilyBloomMissCount();<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
 <span class="sourceLineNo">231</span><a name="line.231"></a>
 <span class="sourceLineNo">232</span>    @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    public long getDataHitCount() {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return lruCacheStats.getDataHitCount() + bucketCacheStats.getDataHitCount();<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    public long getTrailerMissCount() {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return lruCacheStats.getTrailerMissCount() + bucketCacheStats.getTrailerMissCount();<a name="line.234"></a>
 <span class="sourceLineNo">235</span>    }<a name="line.235"></a>
 <span class="sourceLineNo">236</span><a name="line.236"></a>
 <span class="sourceLineNo">237</span>    @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    public long getLeafIndexHitCount() {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return lruCacheStats.getLeafIndexHitCount() + bucketCacheStats.getLeafIndexHitCount();<a name="line.239"></a>
+<span class="sourceLineNo">238</span>    public long getDataHitCount() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return lruCacheStats.getDataHitCount() + bucketCacheStats.getDataHitCount();<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
 <span class="sourceLineNo">241</span><a name="line.241"></a>
 <span class="sourceLineNo">242</span>    @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    public long getBloomChunkHitCount() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return lruCacheStats.getBloomChunkHitCount() + bucketCacheStats.getBloomChunkHitCount();<a name="line.244"></a>
+<span class="sourceLineNo">243</span>    public long getLeafIndexHitCount() {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      return lruCacheStats.getLeafIndexHitCount() + bucketCacheStats.getLeafIndexHitCount();<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span><a name="line.246"></a>
 <span class="sourceLineNo">247</span>    @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public long getMetaHitCount() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      return lruCacheStats.getMetaHitCount() + bucketCacheStats.getMetaHitCount();<a name="line.249"></a>
+<span class="sourceLineNo">248</span>    public long getBloomChunkHitCount() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      return lruCacheStats.getBloomChunkHitCount() + bucketCacheStats.getBloomChunkHitCount();<a name="line.249"></a>
 <span class="sourceLineNo">250</span>    }<a name="line.250"></a>
 <span class="sourceLineNo">251</span><a name="line.251"></a>
 <span class="sourceLineNo">252</span>    @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public long getRootIndexHitCount() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      return lruCacheStats.getRootIndexHitCount() + bucketCacheStats.getRootIndexHitCount();<a name="line.254"></a>
+<span class="sourceLineNo">253</span>    public long getMetaHitCount() {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      return lruCacheStats.getMetaHitCount() + bucketCacheStats.getMetaHitCount();<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    }<a name="line.255"></a>
 <span class="sourceLineNo">256</span><a name="line.256"></a>
 <span class="sourceLineNo">257</span>    @Override<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    public long getIntermediateIndexHitCount() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      return lruCacheStats.getIntermediateIndexHitCount() +<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          bucketCacheStats.getIntermediateIndexHitCount();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    @Override<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public long getFileInfoHitCount() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return lruCacheStats.getFileInfoHitCount() + bucketCacheStats.getFileInfoHitCount();<a name="line.265"></a>
+<span class="sourceLineNo">258</span>    public long getRootIndexHitCount() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return lruCacheStats.getRootIndexHitCount() + bucketCacheStats.getRootIndexHitCount();<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>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public long getIntermediateIndexHitCount() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      return lruCacheStats.getIntermediateIndexHitCount() +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          bucketCacheStats.getIntermediateIndexHitCount();<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>    @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public long getGeneralBloomMetaHitCount() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return lruCacheStats.getGeneralBloomMetaHitCount() +<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          bucketCacheStats.getGeneralBloomMetaHitCount();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    @Override<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public long getDeleteFamilyBloomHitCount() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return lruCacheStats.getDeleteFamilyBloomHitCount() +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          bucketCacheStats.getDeleteFamilyBloomHitCount();<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public long getTrailerHitCount() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return lruCacheStats.getTrailerHitCount() + bucketCacheStats.getTrailerHitCount();<a name="line.282"></a>
+<span class="sourceLineNo">269</span>    public long getFileInfoHitCount() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      return lruCacheStats.getFileInfoHitCount() + bucketCacheStats.getFileInfoHitCount();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    @Override<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    public long getGeneralBloomMetaHitCount() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return lruCacheStats.getGeneralBloomMetaHitCount() +<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          bucketCacheStats.getGeneralBloomMetaHitCount();<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>    @Override<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    public long getDeleteFamilyBloomHitCount() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return lruCacheStats.getDeleteFamilyBloomHitCount() +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          bucketCacheStats.getDeleteFamilyBloomHitCount();<a name="line.282"></a>
 <span class="sourceLineNo">283</span>    }<a name="line.283"></a>
 <span class="sourceLineNo">284</span><a name="line.284"></a>
 <span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public long getRequestCount() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return lruCacheStats.getRequestCount()<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          + bucketCacheStats.getRequestCount();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>    @Override<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    public long getRequestCachingCount() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return lruCacheStats.getRequestCachingCount()<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          + bucketCacheStats.getRequestCachingCount();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public long getMissCount() {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return lruCacheStats.getMissCount() + bucketCacheStats.getMissCount();<a name="line.299"></a>
+<span class="sourceLineNo">286</span>    public long getTrailerHitCount() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return lruCacheStats.getTrailerHitCount() + bucketCacheStats.getTrailerHitCount();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public long getRequestCount() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return lruCacheStats.getRequestCount()<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          + bucketCacheStats.getRequestCount();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    public long getRequestCachingCount() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      return lruCacheStats.getRequestCachingCount()<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          + bucketCacheStats.getRequestCachingCount();<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    }<a name="line.300"></a>
 <span class="sourceLineNo">301</span><a name="line.301"></a>
 <span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public long getPrimaryMissCount() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      return lruCacheStats.getPrimaryMissCount() + bucketCacheStats.getPrimaryMissCount();<a name="line.304"></a>
+<span class="sourceLineNo">303</span>    public long getMissCount() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return lruCacheStats.getMissCount() + bucketCacheStats.getMissCount();<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>    @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    public long getMissCachingCount() {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      return lruCacheStats.getMissCachingCount()<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          + bucketCacheStats.getMissCachingCount();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    public long getHitCount() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      return lruCacheStats.getHitCount() + bucketCacheStats.getHitCount();<a name="line.315"></a>
+<span class="sourceLineNo">308</span>    public long getPrimaryMissCount() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      return lruCacheStats.getPrimaryMissCount() + bucketCacheStats.getPrimaryMissCount();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    public long getMissCachingCount() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      return lruCacheStats.getMissCachingCount()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          + bucketCacheStats.getMissCachingCount();<a name="line.315"></a>
 <span class="sourceLineNo">316</span>    }<a name="line.316"></a>
 <span class="sourceLineNo">317</span><a name="line.317"></a>
 <span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    public long getPrimaryHitCount() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      return lruCacheStats.getPrimaryHitCount() + bucketCacheStats.getPrimaryHitCount();<a name="line.320"></a>
+<span class="sourceLineNo">319</span>    public long getHitCount() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return lruCacheStats.getHitCount() + bucketCacheStats.getHitCount();<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    public long getHitCachingCount() {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      return lruCacheStats.getHitCachingCount()<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          + bucketCacheStats.getHitCachingCount();<a name="line.325"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>    @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    public long getPrimaryHitCount() {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      return lruCacheStats.getPrimaryHitCount() + bucketCacheStats.getPrimaryHitCount();<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public long getEvictionCount() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return lruCacheStats.getEvictionCount()<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          + bucketCacheStats.getEvictionCount();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public long getEvictedCount() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return lruCacheStats.getEvictedCount()<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          + bucketCacheStats.getEvictedCount();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public long getPrimaryEvictedCount() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return lruCacheStats.getPrimaryEvictedCount()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          + bucketCacheStats.getPrimaryEvictedCount();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void rollMetricsPeriod() {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      lruCacheStats.rollMetricsPeriod();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    public long getFailedInserts() {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.354"></a>
+<span class="sourceLineNo">327</span>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public long getHitCachingCount() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return lruCacheStats.getHitCachingCount()<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          + bucketCacheStats.getHitCachingCount();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public long getEvictionCount() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return lruCacheStats.getEvictionCount()<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + bucketCacheStats.getEvictionCount();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public long getEvictedCount() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return lruCacheStats.getEvictedCount()<a name="line.341"></a>
+<span class="sourceLineNo">342</span>          + bucketCacheStats.getEvictedCount();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    public long getPrimaryEvictedCount() {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return lruCacheStats.getPrimaryEvictedCount()<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          + bucketCacheStats.getPrimaryEvictedCount();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public void rollMetricsPeriod() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      lruCacheStats.rollMetricsPeriod();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.354"></a>
 <span class="sourceLineNo">355</span>    }<a name="line.355"></a>
 <span class="sourceLineNo">356</span><a name="line.356"></a>
 <span class="sourceLineNo">357</span>    @Override<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    public long getSumHitCountsPastNPeriods() {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.359"></a>
-<span class="sourceLineNo">360</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.384"></a>
+<span class="sourceLineNo">358</span>    public long getFailedInserts() {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>    @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    public long getSumHitCountsPastNPeriods() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>    @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<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><a name="line.386"></a>
 <span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  public BlockCache[] getBlockCaches() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return new BlockCache [] {this.l1Cache, this.l2Cache};<a name="line.389"></a>
+<span class="sourceLineNo">388</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.389"></a>
 <span class="sourceLineNo">390</span>  }<a name="line.390"></a>
 <span class="sourceLineNo">391</span><a name="line.391"></a>
 <span class="sourceLineNo">392</span>  @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public void setMaxSize(long size) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    this.l1Cache.setMaxSize(size);<a name="line.394"></a>
+<span class="sourceLineNo">393</span>  public BlockCache[] getBlockCaches() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return new BlockCache [] {this.l1Cache, this.l2Cache};<a name="line.394"></a>
 <span class="sourceLineNo">395</span>  }<a name="line.395"></a>
 <span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public int getRpcRefCount(BlockCacheKey cacheKey) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return (this.l2Cache instanceof BucketCache)<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        ? ((BucketCache) this.l2Cache).getRpcRefCount(cacheKey)<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        : 0;<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>  public FirstLevelBlockCache getFirstLevelCache() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return l1Cache;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>}<a name="line.406"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  public void setMaxSize(long size) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    this.l1Cache.setMaxSize(size);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public int getRpcRefCount(BlockCacheKey cacheKey) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    return (this.l2Cache instanceof BucketCache)<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        ? ((BucketCache) this.l2Cache).getRpcRefCount(cacheKey)<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        : 0;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>  public FirstLevelBlockCache getFirstLevelCache() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    return l1Cache;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>}<a name="line.411"></a>
 
 
 
diff --git a/downloads.html b/downloads.html
index fcfe17d..2973c11 100644
--- a/downloads.html
+++ b/downloads.html
@@ -424,7 +424,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index e4b1850..c2ace8d 100644
--- a/export_control.html
+++ b/export_control.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index 62ef0e0..be0905a 100644
--- a/index.html
+++ b/index.html
@@ -264,7 +264,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-tracking.html b/issue-tracking.html
index 04c99b4..79fb717 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -158,7 +158,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mail-lists.html b/mail-lists.html
index e3f3f1a..a45e22f 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -204,7 +204,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index 7ab727e..19f338d 100644
--- a/metrics.html
+++ b/metrics.html
@@ -314,7 +314,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index 01ae178..a51447d 100644
--- a/old_news.html
+++ b/old_news.html
@@ -305,7 +305,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index 8ea08e0..9c65c88 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -310,7 +310,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index c6fd6a8..9df986c 100644
--- a/plugins.html
+++ b/plugins.html
@@ -237,7 +237,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index a90c75a..b24872c 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -639,7 +639,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index b9ee5fb..fb32c30 100644
--- a/project-info.html
+++ b/project-info.html
@@ -199,7 +199,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index a75e4f9..0cfd134 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -175,7 +175,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-summary.html b/project-summary.html
index 2ab372e..5fb71f9 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -201,7 +201,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 707ecfd..51361f7 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -163,7 +163,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index c4ff83f..0d9f9a5 100644
--- a/replication.html
+++ b/replication.html
@@ -158,7 +158,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index c1291aa..4821a75 100644
--- a/resources.html
+++ b/resources.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/source-repository.html b/source-repository.html
index 62055b9..f8815a7 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index e871427..afbaf0e 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -188,7 +188,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index e90ff5e..7e52519 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -379,7 +379,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team-list.html b/team-list.html
index 8752931..4c88de3 100644
--- a/team-list.html
+++ b/team-list.html
@@ -732,7 +732,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 6c789f4..0aa6b58 100644
--- a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -120,7 +120,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.175">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.176">HBaseTestingUtility</a>
 extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
 <div class="block">Facility for testing HBase. Replacement for
  old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -1880,7 +1880,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_PER_SERVER_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.187">REGIONS_PER_SERVER_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -1893,7 +1893,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.192">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
 <div class="block">The default number of regions per regionserver when creating a pre-split
  table.</div>
 <dl>
@@ -1908,7 +1908,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.195">PRESPLIT_TEST_TABLE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -1921,7 +1921,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -1934,7 +1934,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.218">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.219">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
 <div class="block">This is for unit tests parameterized with a single boolean.</div>
 </li>
 </ul>
@@ -1944,7 +1944,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.294">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.295">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
 </li>
 </ul>
 <a name="fam1">
@@ -1953,7 +1953,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam1</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1879">fam1</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1880">fam1</a></pre>
 </li>
 </ul>
 <a name="fam2">
@@ -1962,7 +1962,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam2</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1880">fam2</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1881">fam2</a></pre>
 </li>
 </ul>
 <a name="fam3">
@@ -1971,7 +1971,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam3</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1881">fam3</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1882">fam3</a></pre>
 </li>
 </ul>
 <a name="COLUMNS">
@@ -1980,7 +1980,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMNS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1882">COLUMNS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1883">COLUMNS</a></pre>
 </li>
 </ul>
 <a name="FIRST_CHAR">
@@ -1989,7 +1989,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FIRST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1885">FIRST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1886">FIRST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -2002,7 +2002,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LAST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1886">LAST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1887">LAST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -2015,7 +2015,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1887">START_KEY_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1888">START_KEY_BYTES</a></pre>
 </li>
 </ul>
 <a name="START_KEY">
@@ -2024,7 +2024,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1888">START_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1889">START_KEY</a></pre>
 </li>
 </ul>
 <a name="ROWS">
@@ -2033,7 +2033,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2425">ROWS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2426">ROWS</a></pre>
 <div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
 </li>
 </ul>
@@ -2043,7 +2043,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2440">KEYS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2441">KEYS</a></pre>
 </li>
 </ul>
 <a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2052,7 +2052,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2452">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2453">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
 </li>
 </ul>
 </li>
@@ -2069,7 +2069,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.305">HBaseTestingUtility</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.306">HBaseTestingUtility</a>()</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a default configuration.
 
  <p>Initially, all tmp files are written to a local test data directory.
@@ -2083,7 +2083,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.318">HBaseTestingUtility</a>(@Nullable
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.319">HBaseTestingUtility</a>(@Nullable
                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a given configuration.
 
@@ -2110,7 +2110,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>available</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.226">available</a>(int&nbsp;port)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.227">available</a>(int&nbsp;port)</pre>
 <div class="block">Checks to see if a specific port is available.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2126,7 +2126,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.281">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.282">memStoreTSTagsAndOffheapCombination</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionAndWAL-org.apache.hadoop.hbase.regionserver.Region-">
@@ -2135,7 +2135,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.347">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.348">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2150,7 +2150,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.354">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.355">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2165,7 +2165,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.374">getConfiguration</a>()</pre>
 <div class="block">Returns this classes's instance of <code>Configuration</code>.  Be careful how
  you use the returned Configuration since <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> instances
  can be shared.  The Map of Connections is keyed by the Configuration.  If
@@ -2188,7 +2188,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.377">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.378">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
 </li>
 </ul>
 <a name="setupDataTestDir--">
@@ -2197,7 +2197,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.398">setupDataTestDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.399">setupDataTestDir</a>()</pre>
 <div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
  Give it a random name so can have many concurrent tests running if
  we need to.  It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2224,7 +2224,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.464">getDataTestDirOnTestFS</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.465">getDataTestDirOnTestFS</a>()
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2243,7 +2243,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.479">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.480">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2264,7 +2264,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.524">cleanupDataTestDirOnTestFS</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.525">cleanupDataTestDirOnTestFS</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Cleans the test data directory on the test filesystem.</div>
 <dl>
@@ -2281,7 +2281,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.536">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.537">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Cleans a subdirectory under the test data directory on the test filesystem.</div>
 <dl>
@@ -2298,7 +2298,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.548">startMiniDFSCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.549">startMiniDFSCluster</a>(int&nbsp;servers)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.</div>
 <dl>
@@ -2319,7 +2319,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.563">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.564">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.
  This is useful if you want to run datanode on distinct hosts for things
@@ -2344,7 +2344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.581">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.582">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.
@@ -2368,7 +2368,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.598">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.599">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;racks,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2384,7 +2384,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.626">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.627">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2398,7 +2398,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isNewVersionBehaviorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.692">isNewVersionBehaviorEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.693">isNewVersionBehaviorEnabled</a>()</pre>
 <div class="block">Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating
   new column families. Default to false.</div>
 </li>
@@ -2409,7 +2409,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadShortCircuitOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.706">isReadShortCircuitOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.707">isReadShortCircuitOn</a>()</pre>
 <div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
   This allows to specify this parameter on the command line.
    If not set, default is true.</div>
@@ -2421,7 +2421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.752">shutdownMiniDFSCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.753">shutdownMiniDFSCluster</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
  or does nothing.</div>
@@ -2438,7 +2438,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.774">startMiniCluster</a>(boolean&nbsp;createWALDir)
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.775">startMiniCluster</a>(boolean&nbsp;createWALDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
    <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2465,7 +2465,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.793">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.794">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -2494,7 +2494,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir,
                                                      boolean&nbsp;createWALDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2525,7 +2525,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.836">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.837">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2556,7 +2556,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.857">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.858">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -2585,7 +2585,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.879">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.880">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
                                                      boolean&nbsp;createRootDir)
@@ -2619,7 +2619,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.902">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.903">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2651,7 +2651,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.924">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.925">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2682,7 +2682,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.949">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.950">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>&gt;&nbsp;masterClass,
@@ -2718,7 +2718,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.979">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.980">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
@@ -2756,7 +2756,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1011">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1012">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
@@ -2797,7 +2797,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1031">startMiniCluster</a>(int&nbsp;numSlaves)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1032">startMiniCluster</a>(int&nbsp;numSlaves)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
  All other options will use default values, defined in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2818,7 +2818,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1043">startMiniCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1044">startMiniCluster</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
  Option default value can be found in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2837,7 +2837,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1053">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1054">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
  It modifies Configuration.  It homes the cluster data directory under a random
@@ -2856,7 +2856,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1090">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1091">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster. Usually you won't want this. You'll usually want
@@ -2879,7 +2879,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1142">startMiniHBaseCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1143">startMiniHBaseCluster</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster using default options.
@@ -2901,7 +2901,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1160">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1161">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2933,7 +2933,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1182">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1183">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;rsPorts)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -2967,7 +2967,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1208">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1209">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;rsPorts,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>&gt;&nbsp;masterClass,
@@ -3008,7 +3008,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1224">restartHBaseCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1225">restartHBaseCluster</a>(int&nbsp;servers)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts the hbase cluster up again after shutting it down previously in a
@@ -3028,7 +3028,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">restartHBaseCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1229">restartHBaseCluster</a>(int&nbsp;servers,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;ports)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3045,7 +3045,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1236">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1237">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -3061,7 +3061,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1261">getMiniHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1262">getMiniHBaseCluster</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current mini hbase cluster. Only has something in it after a call
@@ -3077,7 +3077,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">shutdownMiniCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">shutdownMiniCluster</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
 <dl>
@@ -3094,7 +3094,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">shutdownMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">shutdownMiniHBaseCluster</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3109,7 +3109,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>killMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1306">killMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1307">killMiniHBaseCluster</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3124,7 +3124,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1334">getDefaultRootDirPath</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1335">getDefaultRootDirPath</a>(boolean&nbsp;create)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns the path to the default root dir the minicluster uses. If <code>create</code>
  is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3144,7 +3144,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1349">getDefaultRootDirPath</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1350">getDefaultRootDirPath</a>()
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
  except that <code>create</code> flag is false.
@@ -3163,7 +3163,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1365">createRootDir</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1366">createRootDir</a>(boolean&nbsp;create)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates an hbase rootdir in user home directory.  Also creates hbase
  version file.  Normally you won't make use of this method.  Root hbasedir
@@ -3188,7 +3188,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1380">createRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1381">createRootDir</a>()
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
  except that <code>create</code> flag is false.</div>
@@ -3206,7 +3206,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1393">createWALRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1394">createWALRootDir</a>()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a hbase walDir in the user's home directory.
  Normally you won't make use of this method. Root hbaseWALDir
@@ -3226,7 +3226,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1415">flush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1416">flush</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3241,7 +3241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1423">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1424">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3256,7 +3256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1431">compact</a>(boolean&nbsp;major)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1432">compact</a>(boolean&nbsp;major)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Compact all regions in the mini hbase cluster</div>
 <dl>
@@ -3271,7 +3271,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1439">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1440">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     boolean&nbsp;major)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Compact all of a table's reagion in the mini hbase cluster</div>
@@ -3287,7 +3287,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1450">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1451">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;family)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3308,7 +3308,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1462">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1463">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;families)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3329,7 +3329,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1478">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1479">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3350,7 +3350,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1491">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1492">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;family,
                                     int&nbsp;numRegions)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3373,7 +3373,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1508">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1509">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3394,7 +3394,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1520">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1521">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[][]&nbsp;families)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table with multiple regions.</div>
@@ -3415,7 +3415,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1532">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1533">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     int&nbsp;replicaCount,
                                     byte[][]&nbsp;families)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3438,7 +3438,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1545">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1546">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3461,7 +3461,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1559">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1560">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys,
                          int&nbsp;replicaCount)
@@ -3486,7 +3486,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1565">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1566">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions,
                          byte[]&nbsp;startKey,
@@ -3505,7 +3505,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1581">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1582">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                          byte[][]&nbsp;families,
                          org.apache.hadoop.conf.Configuration&nbsp;c)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3526,7 +3526,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1595">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1596">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys,
                          org.apache.hadoop.conf.Configuration&nbsp;c)
@@ -3551,7 +3551,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1615">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1616">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys,
                          <a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/BloomType.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">BloomType</a>&nbsp;type,
@@ -3580,7 +3580,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1646">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1647">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                          byte[][]&nbsp;splitRows)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3601,7 +3601,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1675">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1676">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys,
                          int&nbsp;replicaCount,
@@ -3628,7 +3628,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1686">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1687">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family,
                          int&nbsp;numVersions)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3647,7 +3647,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1694">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1695">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3666,7 +3666,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1703">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1704">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions,
                          byte[][]&nbsp;splitKeys)
@@ -3686,7 +3686,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1729">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1730">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[][]&nbsp;families,
                                     int&nbsp;numVersions)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3705,7 +3705,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1738">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1739">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions,
                          int&nbsp;blockSize)
@@ -3725,7 +3725,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1756">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1757">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions,
                          int&nbsp;blockSize,
@@ -3743,7 +3743,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1781">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1782">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int[]&nbsp;numVersions)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3762,7 +3762,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1805">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1806">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family,
                          byte[][]&nbsp;splitRows)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3781,7 +3781,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1824">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1825">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;family)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table with multiple regions.</div>
@@ -3800,7 +3800,7 @@
 <li class="blockList">
 <h4>modifyTableSync</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1836">modifyTableSync</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1837">modifyTableSync</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
                                                <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3823,7 +3823,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicas</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1844">setReplicas</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1845">setReplicas</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
                                <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                int&nbsp;replicaCount)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -3842,7 +3842,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1855">deleteTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1856">deleteTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Drop an existing table</div>
 <dl>
@@ -3859,7 +3859,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableIfAny</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1868">deleteTableIfAny</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1869">deleteTableIfAny</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Drop an existing table</div>
 <dl>
@@ -3876,7 +3876,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createModifyableTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1890">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1891">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="createTableDescriptor-org.apache.hadoop.hbase.TableName-int-int-int-org.apache.hadoop.hbase.KeepDeletedCells-">
@@ -3885,7 +3885,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1896">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1897">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                              int&nbsp;minVersions,
                                              int&nbsp;versions,
                                              int&nbsp;ttl,
@@ -3898,7 +3898,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createModifyableTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1911">createModifyableTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1912">createModifyableTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name,
                                                               int&nbsp;minVersions,
                                                               int&nbsp;versions,
                                                               int&nbsp;ttl,
@@ -3911,7 +3911,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1931">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1932">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;name)</pre>
 <div class="block">Create a table of name <code>name</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -3927,7 +3927,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1936">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1937">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                              byte[]&nbsp;family)</pre>
 </li>
 </ul>
@@ -3937,7 +3937,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1940">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1941">createTableDescriptor</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                              byte[][]&nbsp;families,
                                              int&nbsp;maxVersions)</pre>
 </li>
@@ -3948,7 +3948,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1961">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1962">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                   byte[]&nbsp;startKey,
                                   byte[]&nbsp;endKey)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3971,7 +3971,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1972">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1973">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call
@@ -3988,7 +3988,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1985">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1986">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                   <a href="../../../../../apidocs/org/apache/hadoop/hbase/wal/WAL.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)
@@ -4013,7 +4013,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2000">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2001">createLocalHRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;startKey,
                                   byte[]&nbsp;stopKey,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -4043,7 +4043,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegionWithInMemoryFlags</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2007">createLocalHRegionWithInMemoryFlags</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2008">createLocalHRegionWithInMemoryFlags</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                    byte[]&nbsp;startKey,
                                                    byte[]&nbsp;stopKey,
                                                    org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -4065,7 +4065,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableData</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2042">deleteTableData</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2043">deleteTableData</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Provide an existing table name to truncate.
  Scans the table and issues a delete for each row read.</div>
@@ -4085,7 +4085,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2062">truncateTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2063">truncateTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            boolean&nbsp;preserveRegions)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Truncate a table using the admin command.
@@ -4107,7 +4107,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2081">truncateTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2082">truncateTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Truncate a table using the admin command.
  Effectively disables, deletes, and recreates the table.
@@ -4130,7 +4130,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2092">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2093">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                      byte[]&nbsp;f)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load table with rows from 'aaa' to 'zzz'.</div>
@@ -4151,7 +4151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2103">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2104">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                      byte[]&nbsp;f,
                      boolean&nbsp;writeToWAL)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4173,7 +4173,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2114">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2115">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                      byte[][]&nbsp;f)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load table of multiple column families with rows from 'aaa' to 'zzz'.</div>
@@ -4194,7 +4194,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2126">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2127">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                      byte[][]&nbsp;f,
                      byte[]&nbsp;value)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4217,7 +4217,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2138">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2139">loadTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                      byte[][]&nbsp;f,
                      byte[]&nbsp;value,
                      boolean&nbsp;writeToWAL)
@@ -4241,7 +4241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2206">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2207">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                       byte[]&nbsp;f)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4256,7 +4256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2210">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2211">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
                       byte[]&nbsp;f)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4271,7 +4271,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2222">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2223">loadRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                       byte[]&nbsp;f,
                       boolean&nbsp;flush)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4294,7 +4294,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2259">loadNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2260">loadNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                             byte[]&nbsp;f,
                             int&nbsp;startRow,
                             int&nbsp;endRow)
@@ -4311,7 +4311,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRandomRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2269">loadRandomRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2270">loadRandomRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                            byte[]&nbsp;f,
                            int&nbsp;rowSize,
                            int&nbsp;totalRows)
@@ -4328,7 +4328,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2281">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2282">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4346,7 +4346,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2300">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2301">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4363,7 +4363,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2305">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2306">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4380,7 +4380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2310">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2311">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4398,7 +4398,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2315">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2316">verifyNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4416,7 +4416,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2335">deleteNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2336">deleteNumericRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4433,7 +4433,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2350">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2351">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the number of rows in the given table.</div>
 <dl>
@@ -4452,7 +4452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2354">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2355">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                             <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Scan.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4467,7 +4467,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2364">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2365">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                      byte[]...&nbsp;families)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4482,7 +4482,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2375">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2376">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the number of rows in the given table.</div>
 <dl>
@@ -4497,7 +4497,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2384">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2385">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4511,7 +4511,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2388">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2389">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                      <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Scan.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4526,7 +4526,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2397">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/InternalScanner.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>&nbsp;scanner)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2398">countRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/InternalScanner.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>&nbsp;scanner)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4540,7 +4540,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>checksumRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2412">checksumRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2413">checksumRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Return an md5 digest of the entire contents of a table.</div>
 <dl>
@@ -4555,7 +4555,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionsInMeta</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2474">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2475">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                  <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                                  byte[][]&nbsp;startKeys)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4580,7 +4580,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createWal</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/wal/WAL.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2500">createWal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/wal/WAL.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2501">createWal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             org.apache.hadoop.fs.Path&nbsp;rootDir,
                             <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4597,7 +4597,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2514">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2515">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                          org.apache.hadoop.fs.Path&nbsp;rootDir,
                                          org.apache.hadoop.conf.Configuration&nbsp;conf,
                                          <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
@@ -4616,7 +4616,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2523">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2524">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                          org.apache.hadoop.fs.Path&nbsp;rootDir,
                                          org.apache.hadoop.conf.Configuration&nbsp;conf,
                                          <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
@@ -4636,7 +4636,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2535">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2536">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                          org.apache.hadoop.fs.Path&nbsp;rootDir,
                                          org.apache.hadoop.conf.Configuration&nbsp;conf,
                                          <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
@@ -4656,7 +4656,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2548">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2549">createRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                          org.apache.hadoop.fs.Path&nbsp;rootDir,
                                          org.apache.hadoop.conf.Configuration&nbsp;conf,
                                          <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
@@ -4676,7 +4676,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2562">getMetaTableRows</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2563">getMetaTableRows</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns all rows from the hbase:meta table.</div>
 <dl>
@@ -4691,7 +4691,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2582">getMetaTableRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2583">getMetaTableRows</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns all rows from the hbase:meta table for a given user table</div>
 <dl>
@@ -4706,7 +4706,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOtherRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2624">getOtherRegionServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2625">getOtherRegionServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="getRSForFirstRegionInTable-org.apache.hadoop.hbase.TableName-">
@@ -4715,7 +4715,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSForFirstRegionInTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2642">getRSForFirstRegionInTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2643">getRSForFirstRegionInTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Tool to get the reference to the region server object that holds the
@@ -4737,7 +4737,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniMapReduceCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.mapred.MiniMRCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2680">startMiniMapReduceCluster</a>()
+<pre>public&nbsp;org.apache.hadoop.mapred.MiniMRCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2681">startMiniMapReduceCluster</a>()
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts a <code>MiniMRCluster</code> with a default number of
  <code>TaskTracker</code>'s.</div>
@@ -4753,7 +4753,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniMapReduceCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2790">shutdownMiniMapReduceCluster</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2791">shutdownMiniMapReduceCluster</a>()</pre>
 <div class="block">Stops the previously started <code>MiniMRCluster</code>.</div>
 </li>
 </ul>
@@ -4763,7 +4763,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2804">createMockRegionServerService</a>()
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2805">createMockRegionServerService</a>()
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.</div>
 <dl>
@@ -4778,7 +4778,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2812">createMockRegionServerService</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/ipc/RpcServerInterface.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;rpc)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2813">createMockRegionServerService</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/ipc/RpcServerInterface.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;rpc)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
  This version is used by TestTokenAuthentication</div>
@@ -4794,7 +4794,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2824">createMockRegionServerService</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/ServerName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">ServerName</a>&nbsp;name)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2825">createMockRegionServerService</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/ServerName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">ServerName</a>&nbsp;name)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
  This version is used by TestOpenRegionHandler</div>
@@ -4811,7 +4811,7 @@
 <li class="blockList">
 <h4>enableDebug</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2838">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz)</pre>
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2839">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as
              HBase only uses log4j. You should do this by your own as it you know which log
              framework you are using then set the log level to debug is very easy.</span></div>
@@ -4828,7 +4828,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireMasterSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2846">expireMasterSession</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2847">expireMasterSession</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire the Master's session</div>
 <dl>
@@ -4843,7 +4843,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireRegionServerSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2855">expireRegionServerSession</a>(int&nbsp;index)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2856">expireRegionServerSession</a>(int&nbsp;index)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire a region server's session</div>
 <dl>
@@ -4860,7 +4860,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2881">expireSession</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;nodeZK)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2882">expireSession</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;nodeZK)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4874,7 +4874,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2896">expireSession</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;nodeZK,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2897">expireSession</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;nodeZK,
                           boolean&nbsp;checkStatus)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire a ZooKeeper session as recommended in ZooKeeper documentation
@@ -4898,7 +4898,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2947">getHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2948">getHBaseCluster</a>()</pre>
 <div class="block">Get the Mini HBase cluster.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4914,7 +4914,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHBaseClusterInterface</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2959">getHBaseClusterInterface</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2960">getHBaseClusterInterface</a>()</pre>
 <div class="block">Returns the HBaseCluster instance.
  <p>Returned object can be any of the subclasses of HBaseCluster, and the
  tests referring this should not assume that the cluster is a mini cluster or a
@@ -4929,7 +4929,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>invalidateConnection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2974">invalidateConnection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2975">invalidateConnection</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Resets the connections so that the next time getConnection() is called, a new connection is
  created. This is needed in cases where the entire cluster / all the masters are shutdown and
@@ -4950,7 +4950,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2990">getConnection</a>()
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2991">getConnection</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a shared Connection to the cluster.
  this method is thread safe.</div>
@@ -4968,7 +4968,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3000">getConnection</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3001">getConnection</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a assigned Connection to the cluster.
  this method is thread safe.</div>
@@ -4988,7 +4988,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncConnection</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/AsyncClusterConnection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3009">getAsyncConnection</a>()
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/AsyncClusterConnection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3010">getAsyncConnection</a>()
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a shared AsyncClusterConnection to the cluster.
  this method is thread safe.</div>
@@ -5006,7 +5006,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncConnection</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/AsyncClusterConnection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3033">getAsyncConnection</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/AsyncClusterConnection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3034">getAsyncConnection</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a assigned AsyncClusterConnection to the cluster.
  this method is thread safe.</div>
@@ -5026,7 +5026,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeConnection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3037">closeConnection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3038">closeConnection</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5040,7 +5040,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3052">getAdmin</a>()
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Admin.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3053">getAdmin</a>()
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns an Admin instance which is shared between HBaseTestingUtility instance users.
  Closing it has no effect, it will be closed automatically when the cluster shutdowns</div>
@@ -5056,7 +5056,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHbck</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Hbck.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Hbck</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3064">getHbck</a>()
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Hbck.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Hbck</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3065">getHbck</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns an <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Hbck.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client"><code>Hbck</code></a> instance. Needs be closed when done.</div>
 <dl>
@@ -5071,7 +5071,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3073">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3074">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Unassign the named region.</div>
 <dl>
@@ -5088,7 +5088,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3082">unassignRegion</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3083">unassignRegion</a>(byte[]&nbsp;regionName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Unassign the named region.</div>
 <dl>
@@ -5105,7 +5105,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegionByRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3092">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;row,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3093">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;row,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionLocator.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Closes the region containing the given row.</div>
@@ -5124,7 +5124,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegionByRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3103">unassignRegionByRow</a>(byte[]&nbsp;row,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3104">unassignRegionByRow</a>(byte[]&nbsp;row,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionLocator.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Closes the region containing the given row.</div>
@@ -5143,7 +5143,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplittableRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3114">getSplittableRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3115">getSplittableRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                    int&nbsp;maxAttempts)</pre>
 <div class="block">Retrieves a splittable region randomly from tableName</div>
 <dl>
@@ -5161,7 +5161,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3146">getDFSCluster</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3147">getDFSCluster</a>()</pre>
 </li>
 </ul>
 <a name="setDFSCluster-org.apache.hadoop.hdfs.MiniDFSCluster-">
@@ -5170,7 +5170,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3150">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3151">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5186,7 +5186,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3162">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3163">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster,
                           boolean&nbsp;requireDown)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5208,7 +5208,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTestFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3171">getTestFileSystem</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3172">getTestFileSystem</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5222,7 +5222,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3182">waitTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3183">waitTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions in a table have been assigned.  Waits default timeout before giving up
@@ -5242,7 +5242,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3187">waitTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3188">waitTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                long&nbsp;timeoutMillis)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5259,7 +5259,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3197">waitTableAvailable</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3198">waitTableAvailable</a>(byte[]&nbsp;table,
                                long&nbsp;timeoutMillis)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5280,7 +5280,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>explainTableAvailability</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3202">explainTableAvailability</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3203">explainTableAvailability</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5294,7 +5294,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>explainTableState</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3226">explainTableState</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3227">explainTableState</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableState.State.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;state)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5310,7 +5310,7 @@
 <li class="blockList">
 <h4>findLastTableState</h4>
 <pre>@Nullable
-public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableState.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableState</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3240">findLastTableState</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
+public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableState.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableState</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3241">findLastTableState</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5324,7 +5324,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3268">waitTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3269">waitTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the
@@ -5345,7 +5345,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3282">waitTableEnabled</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3283">waitTableEnabled</a>(byte[]&nbsp;table,
                              long&nbsp;timeoutMillis)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5369,7 +5369,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3287">waitTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3288">waitTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                              long&nbsp;timeoutMillis)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5384,7 +5384,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3299">waitTableDisabled</a>(byte[]&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3300">waitTableDisabled</a>(byte[]&nbsp;table)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'
@@ -5404,7 +5404,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3304">waitTableDisabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3305">waitTableDisabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                               long&nbsp;millisTimeout)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5421,7 +5421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3316">waitTableDisabled</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3317">waitTableDisabled</a>(byte[]&nbsp;table,
                               long&nbsp;timeoutMillis)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5442,7 +5442,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSomeRegionServersAvailable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3328">ensureSomeRegionServersAvailable</a>(int&nbsp;num)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3329">ensureSomeRegionServersAvailable</a>(int&nbsp;num)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure that at least the specified number of region servers
  are running</div>
@@ -5462,7 +5462,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSomeNonStoppedRegionServersAvailable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3349">ensureSomeNonStoppedRegionServersAvailable</a>(int&nbsp;num)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3350">ensureSomeNonStoppedRegionServersAvailable</a>(int&nbsp;num)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure that at least the specified number of region servers
  are running. We don't count the ones that are currently stopping or are
@@ -5483,7 +5483,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDifferentUser</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3381">getDifferentUser</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/security/User.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3382">getDifferentUser</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;differentiatingSuffix)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method clones the passed <code>c</code> configuration setting a new
@@ -5506,7 +5506,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllOnlineRegions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3397">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;cluster)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3398">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;cluster)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5520,7 +5520,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxRecoveryErrorCount</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3441">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3442">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
                                             int&nbsp;max)</pre>
 <div class="block">Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and
  makes tests linger.  Here is the exception you'll see:
@@ -5548,7 +5548,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assignRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3467">assignRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3468">assignRegion</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Uses directly the assignment manager to assign the region. and waits until the specified region
@@ -5568,7 +5568,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>moveRegionAndWait</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3482">moveRegionAndWait</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;destRegion,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3483">moveRegionAndWait</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;destRegion,
                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/ServerName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">ServerName</a>&nbsp;destServer)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5589,7 +5589,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3507">waitUntilAllRegionsAssigned</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3508">waitUntilAllRegionsAssigned</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions for a table in hbase:meta have a non-empty
  info:server, up to a configuable timeout value (default is 60 seconds)
@@ -5610,7 +5610,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllSystemRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3516">waitUntilAllSystemRegionsAssigned</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3517">waitUntilAllSystemRegionsAssigned</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waith until all system table's regions get assigned</div>
 <dl>
@@ -5625,7 +5625,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3529">waitUntilAllRegionsAssigned</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3530">waitUntilAllRegionsAssigned</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                         long&nbsp;timeout)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions for a table in hbase:meta have a non-empty
@@ -5647,7 +5647,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFromStoreFile</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3611">getFromStoreFile</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HStore.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3612">getFromStoreFile</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HStore.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                                           <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Get.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do a small get/scan against one store. This is required because store
@@ -5664,7 +5664,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitStartKeys</h4>
-<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3641">getRegionSplitStartKeys</a>(byte[]&nbsp;startKey,
+<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3642">getRegionSplitStartKeys</a>(byte[]&nbsp;startKey,
                                         byte[]&nbsp;endKey,
                                         int&nbsp;numRegions)</pre>
 <div class="block">Create region split keys between startkey and endKey</div>
@@ -5684,7 +5684,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFromStoreFile</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3654">getFromStoreFile</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HStore.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3655">getFromStoreFile</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HStore.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                                           byte[]&nbsp;row,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5702,7 +5702,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertKVListsEqual</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3665">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;additionalMsg,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3666">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;additionalMsg,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;expected,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/Cell.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;actual)</pre>
 </li>
@@ -5713,7 +5713,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>safeGetAsStr</h4>
-<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3692">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&nbsp;lst,
+<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3693">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&nbsp;lst,
                                       int&nbsp;i)</pre>
 </li>
 </ul>
@@ -5723,7 +5723,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterKey</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3700">getClusterKey</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3701">getClusterKey</a>()</pre>
 </li>
 </ul>
 <a name="createRandomTable-org.apache.hadoop.hbase.TableName-java.util.Collection-int-int-int-int-int-">
@@ -5732,7 +5732,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRandomTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3708">createRandomTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3709">createRandomTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;families,
                                int&nbsp;maxVersions,
                                int&nbsp;numColsPerRow,
@@ -5755,7 +5755,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>randomFreePort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3792">randomFreePort</a>()</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3793">randomFreePort</a>()</pre>
 </li>
 </ul>
 <a name="randomMultiCastAddress--">
@@ -5764,7 +5764,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>randomMultiCastAddress</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3795">randomMultiCastAddress</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3796">randomMultiCastAddress</a>()</pre>
 </li>
 </ul>
 <a name="waitForHostPort-java.lang.String-int-">
@@ -5773,7 +5773,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForHostPort</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3799">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3800">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host,
                                    int&nbsp;port)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5788,7 +5788,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3830">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3831">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                               byte[]&nbsp;columnFamily,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>&nbsp;compression,
@@ -5810,7 +5810,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3842">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3843">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                               byte[]&nbsp;columnFamily,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>&nbsp;compression,
@@ -5835,7 +5835,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3861">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3862">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                               byte[][]&nbsp;columnFamilies,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>&nbsp;compression,
@@ -5860,7 +5860,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3883">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3884">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5880,7 +5880,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3893">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3894">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd,
                                               int&nbsp;numRegionsPerServer)
@@ -5901,7 +5901,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3904">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3905">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[]&nbsp;hcds,
                                               int&nbsp;numRegionsPerServer)
@@ -5922,7 +5922,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3916">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3917">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;td,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[]&nbsp;cds,
                                               <a href="../../../../../apidocs/org/apache/hadoop/hbase/util/RegionSplitter.SplitAlgorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.util">RegionSplitter.SplitAlgorithm</a>&nbsp;splitter,
@@ -5944,7 +5944,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRSPort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3961">getMetaRSPort</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3962">getMetaRSPort</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5958,7 +5958,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionOnServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3973">assertRegionOnServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3974">assertRegionOnServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                  <a href="../../../../../apidocs/org/apache/hadoop/hbase/ServerName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                                  long&nbsp;timeout)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -5980,7 +5980,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionOnlyOnServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3992">assertRegionOnlyOnServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3993">assertRegionOnlyOnServer</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/RegionInfo.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                      <a href="../../../../../apidocs/org/apache/hadoop/hbase/ServerName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                                      long&nbsp;timeout)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -6000,7 +6000,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4022">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4023">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cd)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6015,7 +6015,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestRegion</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4029">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4030">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cd,
                                 <a href="../../../../../apidocs/org/apache/hadoop/hbase/io/hfile/BlockCache.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6031,7 +6031,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFileSystemURI</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4037">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fsURI)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4038">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fsURI)</pre>
 </li>
 </ul>
 <a name="predicateNoRegionsInTransition--">
@@ -6040,7 +6040,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateNoRegionsInTransition</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.ExplainingPredicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.ExplainingPredicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4044">predicateNoRegionsInTransition</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.ExplainingPredicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.ExplainingPredicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4045">predicateNoRegionsInTransition</a>()</pre>
 <div class="block">Returns a <a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that there are no regions in transition in master</div>
 </li>
 </ul>
@@ -6050,7 +6050,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableEnabled</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4067">predicateTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4068">predicateTableEnabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6060,7 +6060,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableDisabled</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4084">predicateTableDisabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4085">predicateTableDisabled</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6070,7 +6070,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableAvailable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4101">predicateTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4102">predicateTableAvailable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../../apidocs/org/apache/hadoop/hbase/Waiter.Predicate.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6080,7 +6080,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilNoRegionsInTransition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4138">waitUntilNoRegionsInTransition</a>(long&nbsp;timeout)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4139">waitUntilNoRegionsInTransition</a>(long&nbsp;timeout)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until no regions in transition.</div>
 <dl>
@@ -6097,7 +6097,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilNoRegionsInTransition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4146">waitUntilNoRegionsInTransition</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4147">waitUntilNoRegionsInTransition</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until no regions in transition. (time limit 15min)</div>
 <dl>
@@ -6112,7 +6112,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitLabelAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4155">waitLabelAvailable</a>(long&nbsp;timeoutMillis,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4156">waitLabelAvailable</a>(long&nbsp;timeoutMillis,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;labels)</pre>
 <div class="block">Wait until labels is ready in VisibilityLabelsCache.</div>
 <dl>
@@ -6128,7 +6128,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>generateColumnDescriptors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4186">generateColumnDescriptors</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4187">generateColumnDescriptors</a>()</pre>
 <div class="block">Create a set of column descriptors with the combination of compression,
  encoding, bloom codecs available.</div>
 <dl>
@@ -6143,7 +6143,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>generateColumnDescriptors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4196">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4197">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)</pre>
 <div class="block">Create a set of column descriptors with the combination of compression,
  encoding, bloom codecs available.</div>
 <dl>
@@ -6160,7 +6160,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSupportedCompressionAlgorithms</h4>
-<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4220">getSupportedCompressionAlgorithms</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4221">getSupportedCompressionAlgorithms</a>()</pre>
 <div class="block">Get supported compression algorithms.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -6174,7 +6174,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getClosestRowBefore</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Result.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4235">getClosestRowBefore</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Result.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4236">getClosestRowBefore</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
                                   byte[]&nbsp;row,
                                   byte[]&nbsp;family)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6190,7 +6190,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMiniKdc</h4>
-<pre>public&nbsp;org.apache.hadoop.minikdc.MiniKdc&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4267">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;keytabFile)
+<pre>public&nbsp;org.apache.hadoop.minikdc.MiniKdc&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4268">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;keytabFile)
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Sets up <code>MiniKdc</code> for testing security.
  Uses <a href="../../../../../apidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.security"><code>HBaseKerberosUtils</code></a> to set the given keytab file as
@@ -6210,7 +6210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumHFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4297">getNumHFiles</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4298">getNumHFiles</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;family)</pre>
 </li>
 </ul>
@@ -6220,7 +6220,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumHFilesForRS</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4306">getNumHFilesForRS</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4307">getNumHFilesForRS</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
                              <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                              byte[]&nbsp;family)</pre>
 </li>
@@ -6231,7 +6231,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyTableDescriptorIgnoreTableName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4315">verifyTableDescriptorIgnoreTableName</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;ltd,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4316">verifyTableDescriptorIgnoreTableName</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;ltd,
                                                  <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;rtd)</pre>
 </li>
 </ul>
@@ -6241,7 +6241,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>await</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4331">await</a>(long&nbsp;sleepMillis,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4332">await</a>(long&nbsp;sleepMillis,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BooleanSupplier.html?is-external=true" title="class or interface in java.util.function">BooleanSupplier</a>&nbsp;condition)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Await the successful return of <code>condition</code>, sleeping <code>sleepMillis</code> between
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 2c8561f..67b415f 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -88,4268 +88,4269 @@
 <span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.Result;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Table;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.User;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.mapred.JobConf;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.zookeeper.WatchedEvent;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.zookeeper.ZooKeeper;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>/**<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * Facility for testing HBase. Replacement for<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * Not all methods work with the real cluster.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * Depends on log4j being on classpath and<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * logging levels.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * In the configuration properties, default values for master-info-port and<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * avoiding port contention if another local HBase instance is already running).<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * setting it to true.<a name="line.171"></a>
-<span class="sourceLineNo">172</span> */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>@InterfaceAudience.Public<a name="line.173"></a>
-<span class="sourceLineNo">174</span>@SuppressWarnings("deprecation")<a name="line.174"></a>
-<span class="sourceLineNo">175</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * used in mini dfs.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  @Deprecated<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * table.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Table;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.User;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.JobConf;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.zookeeper.WatchedEvent;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * Facility for testing HBase. Replacement for<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * Not all methods work with the real cluster.<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * Depends on log4j being on classpath and<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * logging levels.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * In the configuration properties, default values for master-info-port and<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * avoiding port contention if another local HBase instance is already running).<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * setting it to true.<a name="line.172"></a>
+<span class="sourceLineNo">173</span> */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>@InterfaceAudience.Public<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@SuppressWarnings("deprecation")<a name="line.175"></a>
+<span class="sourceLineNo">176</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * used in mini dfs.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private MiniDFSCluster dfsCluster = null;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private MiniMRCluster mrCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private volatile boolean miniClusterRunning;<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private String hadoopLogDir;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * HBaseTestingUtility*/<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private Path dataTestDirOnTestFS = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static String FS_URI;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Checks to see if a specific port is available.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param port the port number to check for availability<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public static boolean available(int port) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    ServerSocket ss = null;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    DatagramSocket ds = null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ss = new ServerSocket(port);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      ss.setReuseAddress(true);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      ds = new DatagramSocket(port);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      ds.setReuseAddress(true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    } catch (IOException e) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // Do nothing<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } finally {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      if (ds != null) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        ds.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ss != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        try {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          ss.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        } catch (IOException e) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          /* should not be thrown */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return false;<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>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * testing.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    for (Compression.Algorithm comprAlgo :<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    return Collections.unmodifiableList(configurations);<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>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Create combination of memstoreTS and tags<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    configurations.add(new Object[] { false, false });<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, true });<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    configurations.add(new Object[] { true, false });<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, true });<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return Collections.unmodifiableList(configurations);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    configurations.add(new Object[] { false, false, true });<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, false });<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, true, true });<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, false });<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { true, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    return Collections.unmodifiableList(configurations);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      bloomAndCompressionCombinations();<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private static String FS_URI;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param port the port number to check for availability<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static boolean available(int port) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    ServerSocket ss = null;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    DatagramSocket ds = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    try {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      ss = new ServerSocket(port);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      ss.setReuseAddress(true);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      ds = new DatagramSocket(port);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      ds.setReuseAddress(true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      return true;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    } catch (IOException e) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // Do nothing<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      if (ds != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        ds.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ss != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        try {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          ss.close();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        } catch (IOException e) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          /* should not be thrown */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return false;<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>  /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * testing.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (Compression.Algorithm comprAlgo :<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return Collections.unmodifiableList(configurations);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * Create combination of memstoreTS and tags<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, false });<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    configurations.add(new Object[] { false, true });<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, false });<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    configurations.add(new Object[] { true, true });<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return Collections.unmodifiableList(configurations);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, true });<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, false, false });<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, true });<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, true, false });<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return Collections.unmodifiableList(configurations);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      bloomAndCompressionCombinations();<a name="line.296"></a>
 <span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public HBaseTestingUtility() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this(HBaseConfiguration.create());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @param conf The configuration to use for further operations<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    super(conf);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // Save this for when setting default file:// breaks things<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    // Every cluster is a local cluster until we start DFS<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // Note that conf could be null, but this.conf will not be<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    String dataTestDir = getDataTestDir().toString();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // tests opt-out for random port assignment<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    closeRegionAndWAL((HRegion)r);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    if (r == null) return;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    r.close();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (r.getWAL() == null) return;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    r.getWAL().close();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * make a copy and use that.  Do<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return Instance of Configuration.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public Configuration getConfiguration() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return super.getConfiguration();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    this.hbaseCluster = hbaseCluster;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Give it a random name so can have many concurrent tests running if<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * System property, as it's what minidfscluster bases<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * instances -- another instance could grab the temporary<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * single instance only is how the minidfscluster works.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   *<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * We also create the underlying directory names for<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   *<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * @return The calculated data test build directory, if newly-created.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected Path setupDataTestDir() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Path testPath = super.setupDataTestDir();<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (null == testPath) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      "hadoop.log.dir",<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      testPath, "hadoop-log-dir");<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    createSubDirAndSystemProperty(<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      "hadoop.tmp.dir",<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      testPath, "hadoop-tmp-dir");<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    createSubDir(<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      "mapreduce.cluster.local.dir",<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      testPath, "mapred-local-dir");<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return testPath;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private void createSubDirAndSystemProperty(<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    String propertyName, Path parent, String subDirName){<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    String sysValue = System.getProperty(propertyName);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (sysValue != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // There is already a value set. So we do nothing but hope<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      //  that there will be no conflicts<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      String confValue = conf.get(propertyName);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.432"></a>
-<span class="sourceLineNo">433</span>       LOG.warn(<a name="line.433"></a>
-<span class="sourceLineNo">434</span>         propertyName + " property value differs in configuration and system: "+<a name="line.434"></a>
-<span class="sourceLineNo">435</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.435"></a>
-<span class="sourceLineNo">436</span>         " Erasing configuration value by system value."<a name="line.436"></a>
-<span class="sourceLineNo">437</span>       );<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      conf.set(propertyName, sysValue);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } else {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      createSubDir(propertyName, parent, subDirName);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      System.setProperty(propertyName, conf.get(propertyName));<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><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * for the test filesystem by default<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @see #setupDataTestDirOnTestFS()<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @see #getTestFileSystem()<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    FileSystem fs = getTestFileSystem();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * if the test relies on it.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @return a unique path in the test filesystem<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   */<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (dataTestDirOnTestFS == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      setupDataTestDirOnTestFS();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    return dataTestDirOnTestFS;<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * if the test relies on it.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * @return a unique path in the test filesystem<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * Creates a new directory if not already setup.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (dataTestDirOnTestFS != null) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          + dataTestDirOnTestFS.toString());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    //the working directory, and create a unique sub dir there<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    FileSystem fs = getTestFileSystem();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    Path newDataTestDir;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    String randomStr = getRandomUUID().toString();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    } else {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      Path base = getBaseTestDirOnTestFS();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      newDataTestDir = new Path(base, randomStr);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return newDataTestDir;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  /**<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * Cleans the test data directory on the test filesystem.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   * @return True if we removed the test dirs<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * @throws IOException<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   */<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (ret)<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      dataTestDirOnTestFS = null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return ret;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  /**<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return True if we removed child<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @throws IOException<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   */<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    return getTestFileSystem().delete(cpath, true);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  /**<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * Start a minidfscluster.<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param servers How many DNs to start.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @throws Exception<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @see #shutdownMiniDFSCluster()<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * @return The mini dfs cluster created.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return startMiniDFSCluster(servers, null);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   * Start a minidfscluster.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * like HDFS block location verification.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * datanodes will have the same host name.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param hosts hostnames DNs to run on.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   * @throws Exception<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @see #shutdownMiniDFSCluster()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @return The mini dfs cluster created.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  throws Exception {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    } else {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      return startMiniDFSCluster(1, null);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Start a minidfscluster.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Can only create one.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @param servers How many DNs to start.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @param hosts hostnames DNs to run on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @throws Exception<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * @see #shutdownMiniDFSCluster()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return The mini dfs cluster created.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  throws Exception {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  private void setFs() throws IOException {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if(this.dfsCluster == null){<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      return;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    // re-enable this check with dfs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throws Exception {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    createDirsAndSetProperties();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      "ERROR");<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        true, null, racks, hosts, null);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // Set this just-started cluster as our filesystem.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    setFs();<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>    // Wait for the cluster to be totally up<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    this.dfsCluster.waitClusterUp();<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    //reset the test directory for test file system<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    dataTestDirOnTestFS = null;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    String dataTestDir = getDataTestDir().toString();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    return this.dfsCluster;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    createDirsAndSetProperties();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      "ERROR");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        null, null, null);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return dfsCluster;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * the conf.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   * &lt;pre&gt;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * &lt;/pre&gt;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    setupClusterTestDir();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    createDirAndSetProperty("test.cache.data");<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    enableShortCircuit();<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      new Path(root, "mapred-output-dir").toString());<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *  new column families. Default to false.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    String v = System.getProperty(propName);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    if (v != null){<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      return Boolean.parseBoolean(v);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    return false;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  /**<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   *  This allows to specify this parameter on the command line.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   *   If not set, default is true.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public boolean isReadShortCircuitOn(){<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    String readOnProp = System.getProperty(propName);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    if (readOnProp != null){<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    } else {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      return conf.getBoolean(propName, false);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  /** Enable the short circuit read, unless configured differently.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   */<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  private void enableShortCircuit() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    if (isReadShortCircuitOn()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      String curUser = System.getProperty("user.name");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // read short circuit, for hdfs<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // read short circuit, for hbase<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    } else {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      LOG.info("read short circuit is OFF");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  private String createDirAndSetProperty(final String property) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return createDirAndSetProperty(property, property);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String path = getDataTestDir(relPath).toString();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    System.setProperty(property, path);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    conf.set(property, path);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    new File(path).mkdirs();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    return path;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * or does nothing.<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @throws IOException<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    if (this.dfsCluster != null) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      this.dfsCluster.shutdown();<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      dfsCluster = null;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      dataTestDirOnTestFS = null;<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  /**<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return The mini HBase cluster created.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @see #shutdownMiniCluster()<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   */<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  @Deprecated<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        .createWALDir(createWALDir).build();<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    return startMiniCluster(option);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  /**<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @return The mini HBase cluster created.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @see #shutdownMiniCluster()<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>   */<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  @Deprecated<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  throws Exception {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.795"></a>
-<span class="sourceLineNo">796</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    return startMiniCluster(option);<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>  /**<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @return The mini HBase cluster created.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @see #shutdownMiniCluster()<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   */<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  @Deprecated<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      boolean createWALDir) throws Exception {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        .createWALDir(createWALDir).build();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    return startMiniCluster(option);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  /**<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * @param numMasters Master node number.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @return The mini HBase cluster created.<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @see #shutdownMiniCluster()<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   */<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  @Deprecated<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    throws Exception {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        .numDataNodes(numSlaves).build();<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return startMiniCluster(option);<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>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @param numMasters Master node number.<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return The mini HBase cluster created.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * @see #shutdownMiniCluster()<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.853"></a>
-<span class="sourceLineNo">854</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   */<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  @Deprecated<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    return startMiniCluster(option);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * @param numMasters Master node number.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   *                      HDFS data node number.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return The mini HBase cluster created.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * @see #shutdownMiniCluster()<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
-<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      boolean createRootDir) throws Exception {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    return startMiniCluster(option);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * @param numMasters Master node number.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   *                      HDFS data node number.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * @return The mini HBase cluster created.<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * @see #shutdownMiniCluster()<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   */<a name="line.900"></a>
-<span class="sourceLineNo">901</span>  @Deprecated<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      throws Exception {<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    return startMiniCluster(option);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param numMasters Master node number.<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @param numRegionServers Number of region servers.<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @param numDataNodes Number of datanodes.<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   * @return The mini HBase cluster created.<a name="line.916"></a>
-<span class="sourceLineNo">917</span>   * @see #shutdownMiniCluster()<a name="line.917"></a>
-<span class="sourceLineNo">918</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  @Deprecated<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      throws Exception {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        .build();<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return startMiniCluster(option);<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>  /**<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @param numMasters Master node number.<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *                      HDFS data node number.<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * @return The mini HBase cluster created.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   * @see #shutdownMiniCluster()<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
-<span class="sourceLineNo">948</span>  @Deprecated<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      throws Exception {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.954"></a>
-<span class="sourceLineNo">955</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .build();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return startMiniCluster(option);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @param numMasters Master node number.<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * @param numRegionServers Number of region servers.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * @param numDataNodes Number of datanodes.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.967"></a>
-<span class="sourceLineNo">968</span>   *                      HDFS data node number.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.969"></a>
-<span class="sourceLineNo">970</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return The mini HBase cluster created.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * @see #shutdownMiniCluster()<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   */<a name="line.977"></a>
-<span class="sourceLineNo">978</span>  @Deprecated<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    throws Exception {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        .build();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    return startMiniCluster(option);<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * @param numMasters Master node number.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * @param numRegionServers Number of region servers.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   * @param numDataNodes Number of datanodes.<a name="line.996"></a>
-<span class="sourceLineNo">997</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.997"></a>
-<span class="sourceLineNo">998</span>   *                      HDFS data node number.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * @return The mini HBase cluster created.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @see #shutdownMiniCluster()<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  @Deprecated<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      boolean createWALDir) throws Exception {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        .build();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    return startMiniCluster(option);<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>  /**<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   * @see #shutdownMiniDFSCluster()<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>   */<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>    return startMiniCluster(option);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  /**<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @see #shutdownMiniDFSCluster()<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  }<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>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * @see #shutdownMiniDFSCluster()<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   */<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // If we already put up a cluster, fail.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    if (miniClusterRunning) {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    miniClusterRunning = true;<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    setupClusterTestDir();<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span><a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (dfsCluster == null) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      LOG.info("STARTING DFS");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    } else {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      LOG.info("NOT STARTING DFS");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // Start up a zk cluster.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (getZkCluster() == null) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      startMiniZKCluster(option.getNumZkServers());<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // Start the MiniHBaseCluster<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    return startMiniHBaseCluster(option);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>  }<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>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   */<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    throws IOException, InterruptedException {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    createRootDir(option.isCreateRootDir());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    if (option.isCreateWALDir()) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      createWALRootDir();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // for tests that do not read hbase-defaults.xml<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    setHBaseFsTmpDir();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // These settings will make the server waits until this exact number of<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    // regions servers are connected.<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span><a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    Configuration c = new Configuration(this.conf);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      option.getMasterClass(), option.getRsClass());<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>      for (;;) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (s.next() == null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          break;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        }<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><a name="line.1128"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   *<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public HBaseTestingUtility() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this(HBaseConfiguration.create());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  /**<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   *<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @param conf The configuration to use for further operations<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    super(conf);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // Save this for when setting default file:// breaks things<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // Every cluster is a local cluster until we start DFS<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    // Note that conf could be null, but this.conf will not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String dataTestDir = getDataTestDir().toString();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    // tests opt-out for random port assignment<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    closeRegionAndWAL((HRegion)r);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (r == null) return;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    r.close();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    if (r.getWAL() == null) return;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    r.getWAL().close();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * make a copy and use that.  Do<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @return Instance of Configuration.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Configuration getConfiguration() {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return super.getConfiguration();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    this.hbaseCluster = hbaseCluster;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Give it a random name so can have many concurrent tests running if<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * System property, as it's what minidfscluster bases<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * instances -- another instance could grab the temporary<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * single instance only is how the minidfscluster works.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   *<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * We also create the underlying directory names for<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   *<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return The calculated data test build directory, if newly-created.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected Path setupDataTestDir() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    Path testPath = super.setupDataTestDir();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (null == testPath) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    createSubDirAndSystemProperty(<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      "hadoop.log.dir",<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      testPath, "hadoop-log-dir");<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    createSubDirAndSystemProperty(<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      "hadoop.tmp.dir",<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      testPath, "hadoop-tmp-dir");<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    createSubDir(<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      "mapreduce.cluster.local.dir",<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      testPath, "mapred-local-dir");<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return testPath;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  private void createSubDirAndSystemProperty(<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    String propertyName, Path parent, String subDirName){<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    String sysValue = System.getProperty(propertyName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sysValue != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      // There is already a value set. So we do nothing but hope<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      //  that there will be no conflicts<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      String confValue = conf.get(propertyName);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.433"></a>
+<span class="sourceLineNo">434</span>       LOG.warn(<a name="line.434"></a>
+<span class="sourceLineNo">435</span>         propertyName + " property value differs in configuration and system: "+<a name="line.435"></a>
+<span class="sourceLineNo">436</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.436"></a>
+<span class="sourceLineNo">437</span>         " Erasing configuration value by system value."<a name="line.437"></a>
+<span class="sourceLineNo">438</span>       );<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      conf.set(propertyName, sysValue);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      createSubDir(propertyName, parent, subDirName);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * for the test filesystem by default<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * @see #setupDataTestDirOnTestFS()<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @see #getTestFileSystem()<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    FileSystem fs = getTestFileSystem();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * if the test relies on it.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @return a unique path in the test filesystem<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    if (dataTestDirOnTestFS == null) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<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>  /**<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   * if the test relies on it.<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * @return a unique path in the test filesystem<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  /**<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Creates a new directory if not already setup.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (dataTestDirOnTestFS != null) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          + dataTestDirOnTestFS.toString());<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      return;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    //the working directory, and create a unique sub dir there<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    FileSystem fs = getTestFileSystem();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    Path newDataTestDir;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    String randomStr = getRandomUUID().toString();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    } else {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      Path base = getBaseTestDirOnTestFS();<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      newDataTestDir = new Path(base, randomStr);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    return newDataTestDir;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>  /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * Cleans the test data directory on the test filesystem.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @return True if we removed the test dirs<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   * @throws IOException<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   */<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    if (ret)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      dataTestDirOnTestFS = null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    return ret;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  /**<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.533"></a>
+<span class="sourceLineNo">534</span>   * @return True if we removed child<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * @throws IOException<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    return getTestFileSystem().delete(cpath, true);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * Start a minidfscluster.<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   * @param servers How many DNs to start.<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * @throws Exception<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @see #shutdownMiniDFSCluster()<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * @return The mini dfs cluster created.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   */<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    return startMiniDFSCluster(servers, null);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   * Start a minidfscluster.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   * like HDFS block location verification.<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * datanodes will have the same host name.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param hosts hostnames DNs to run on.<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @throws Exception<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @see #shutdownMiniDFSCluster()<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @return The mini dfs cluster created.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  throws Exception {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    } else {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      return startMiniDFSCluster(1, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * Start a minidfscluster.<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Can only create one.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @param servers How many DNs to start.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param hosts hostnames DNs to run on.<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @throws Exception<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @see #shutdownMiniDFSCluster()<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return The mini dfs cluster created.<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  throws Exception {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  private void setFs() throws IOException {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    if(this.dfsCluster == null){<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      return;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    // re-enable this check with dfs<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      throws Exception {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    createDirsAndSetProperties();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      "ERROR");<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        true, null, racks, hosts, null);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    // Set this just-started cluster as our filesystem.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    setFs();<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>    // Wait for the cluster to be totally up<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    this.dfsCluster.waitClusterUp();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    //reset the test directory for test file system<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    dataTestDirOnTestFS = null;<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    String dataTestDir = getDataTestDir().toString();<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>    return this.dfsCluster;<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    createDirsAndSetProperties();<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      "ERROR");<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        null, null, null);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    return dfsCluster;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.639"></a>
+<span class="sourceLineNo">640</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.640"></a>
+<span class="sourceLineNo">641</span>   * the conf.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>   * &lt;pre&gt;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * }<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * &lt;/pre&gt;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    setupClusterTestDir();<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    createDirAndSetProperty("test.cache.data");<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    enableShortCircuit();<a name="line.659"></a>
+<span class="sourceLineNo">660</span><a name="line.660"></a>
+<span class="sourceLineNo">661</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      new Path(root, "mapred-output-dir").toString());<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   *  new column families. Default to false.<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   */<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    String v = System.getProperty(propName);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    if (v != null){<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return Boolean.parseBoolean(v);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    return false;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   *  This allows to specify this parameter on the command line.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   *   If not set, default is true.<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReadShortCircuitOn(){<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    String readOnProp = System.getProperty(propName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (readOnProp != null){<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    } else {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      return conf.getBoolean(propName, false);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>  /** Enable the short circuit read, unless configured differently.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   */<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  private void enableShortCircuit() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    if (isReadShortCircuitOn()) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      String curUser = System.getProperty("user.name");<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // read short circuit, for hdfs<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      // read short circuit, for hbase<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    } else {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      LOG.info("read short circuit is OFF");<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  private String createDirAndSetProperty(final String property) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    return createDirAndSetProperty(property, property);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>  }<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    String path = getDataTestDir(relPath).toString();<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    System.setProperty(property, path);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    conf.set(property, path);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    new File(path).mkdirs();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    return path;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * or does nothing.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @throws IOException<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   */<a name="line.752"></a>
+<span class="sourceLineNo">753</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    if (this.dfsCluster != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      this.dfsCluster.shutdown();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      dfsCluster = null;<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      dataTestDirOnTestFS = null;<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @return The mini HBase cluster created.<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @see #shutdownMiniCluster()<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   */<a name="line.773"></a>
+<span class="sourceLineNo">774</span>  @Deprecated<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        .createWALDir(createWALDir).build();<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    return startMiniCluster(option);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>  /**<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.782"></a>
+<span class="sourceLineNo">783</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.783"></a>
+<span class="sourceLineNo">784</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.784"></a>
+<span class="sourceLineNo">785</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.785"></a>
+<span class="sourceLineNo">786</span>   * @return The mini HBase cluster created.<a name="line.786"></a>
+<span class="sourceLineNo">787</span>   * @see #shutdownMiniCluster()<a name="line.787"></a>
+<span class="sourceLineNo">788</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.788"></a>
+<span class="sourceLineNo">789</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.789"></a>
+<span class="sourceLineNo">790</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   */<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  @Deprecated<a name="line.793"></a>
+<span class="sourceLineNo">794</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.794"></a>
+<span class="sourceLineNo">795</span>  throws Exception {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    return startMiniCluster(option);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return The mini HBase cluster created.<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @see #shutdownMiniCluster()<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.809"></a>
+<span class="sourceLineNo">810</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.811"></a>
+<span class="sourceLineNo">812</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.812"></a>
+<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  @Deprecated<a name="line.814"></a>
+<span class="sourceLineNo">815</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>      boolean createWALDir) throws Exception {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.817"></a>
+<span class="sourceLineNo">818</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.818"></a>
+<span class="sourceLineNo">819</span>        .createWALDir(createWALDir).build();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    return startMiniCluster(option);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param numMasters Master node number.<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @return The mini HBase cluster created.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @see #shutdownMiniCluster()<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    throws Exception {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        .numDataNodes(numSlaves).build();<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return startMiniCluster(option);<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @param numMasters Master node number.<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * @return The mini HBase cluster created.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * @see #shutdownMiniCluster()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   */<a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Deprecated<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    return startMiniCluster(option);<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>  /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * @param numMasters Master node number.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   *                      HDFS data node number.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * @return The mini HBase cluster created.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * @see #shutdownMiniCluster()<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      boolean createRootDir) throws Exception {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.883"></a>
+<span class="sourceLineNo">884</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    return startMiniCluster(option);<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>  /**<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * @param numMasters Master node number.<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   *                      HDFS data node number.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @return The mini HBase cluster created.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * @see #shutdownMiniCluster()<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   */<a name="line.901"></a>
+<span class="sourceLineNo">902</span>  @Deprecated<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      throws Exception {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    return startMiniCluster(option);<a name="line.908"></a>
+<span class="sourceLineNo">909</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.912"></a>
+<span class="sourceLineNo">913</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @param numMasters Master node number.<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   * @param numRegionServers Number of region servers.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   * @param numDataNodes Number of datanodes.<a name="line.916"></a>
+<span class="sourceLineNo">917</span>   * @return The mini HBase cluster created.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * @see #shutdownMiniCluster()<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.921"></a>
+<span class="sourceLineNo">922</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>   */<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  @Deprecated<a name="line.924"></a>
+<span class="sourceLineNo">925</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.925"></a>
+<span class="sourceLineNo">926</span>      throws Exception {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        .build();<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    return startMiniCluster(option);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>  /**<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @param numMasters Master node number.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   *                      HDFS data node number.<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @return The mini HBase cluster created.<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @see #shutdownMiniCluster()<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
+<span class="sourceLineNo">949</span>  @Deprecated<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      throws Exception {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.954"></a>
+<span class="sourceLineNo">955</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.955"></a>
+<span class="sourceLineNo">956</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.957"></a>
+<span class="sourceLineNo">958</span>        .build();<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    return startMiniCluster(option);<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  }<a name="line.960"></a>
+<span class="sourceLineNo">961</span><a name="line.961"></a>
+<span class="sourceLineNo">962</span>  /**<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @param numMasters Master node number.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * @param numRegionServers Number of region servers.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * @param numDataNodes Number of datanodes.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   *                      HDFS data node number.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   * @return The mini HBase cluster created.<a name="line.972"></a>
+<span class="sourceLineNo">973</span>   * @see #shutdownMiniCluster()<a name="line.973"></a>
+<span class="sourceLineNo">974</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.975"></a>
+<span class="sourceLineNo">976</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  @Deprecated<a name="line.979"></a>
+<span class="sourceLineNo">980</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    throws Exception {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        .build();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    return startMiniCluster(option);<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>  /**<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * @param numMasters Master node number.<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * @param numRegionServers Number of region servers.<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * @param numDataNodes Number of datanodes.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   *                      HDFS data node number.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * @return The mini HBase cluster created.<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * @see #shutdownMiniCluster()<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   */<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>  @Deprecated<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      boolean createWALDir) throws Exception {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        .build();<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    return startMiniCluster(option);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  /**<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * @see #shutdownMiniDFSCluster()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    return startMiniCluster(option);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>  }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>  /**<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>   * @see #shutdownMiniDFSCluster()<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   */<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<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>  /**<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * @see #shutdownMiniDFSCluster()<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   */<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // If we already put up a cluster, fail.<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    if (miniClusterRunning) {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    miniClusterRunning = true;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    setupClusterTestDir();<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    if (dfsCluster == null) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      LOG.info("STARTING DFS");<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    } else {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      LOG.info("NOT STARTING DFS");<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span><a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // Start up a zk cluster.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    if (getZkCluster() == null) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      startMiniZKCluster(option.getNumZkServers());<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>    // Start the MiniHBaseCluster<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   */<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    throws IOException, InterruptedException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    createRootDir(option.isCreateRootDir());<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    if (option.isCreateWALDir()) {<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      createWALRootDir();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    // for tests that do not read hbase-defaults.xml<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    setHBaseFsTmpDir();<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    // These settings will make the server waits until this exact number of<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // regions servers are connected.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span><a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    Configuration c = new Configuration(this.conf);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      option.getMasterClass(), option.getRsClass());<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      for (;;) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        if (s.next() == null) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          break;<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>    }<a name="line.1128"></a>
 <span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span><a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    return (MiniHBaseCluster) hbaseCluster;<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>  /**<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * Starts up mini hbase cluster using default options.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   */<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>  /**<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>   * Starts up mini hbase cluster.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>   * @param numMasters Master node number.<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   * @param numRegionServers Number of region servers.<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   * @return The mini HBase cluster created.<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   */<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  @Deprecated<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      throws IOException, InterruptedException {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    return startMiniHBaseCluster(option);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>  }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  /**<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   * Starts up mini hbase cluster.<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>   * @param numMasters Master node number.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>   * @param numRegionServers Number of region servers.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>   * @return The mini HBase cluster created.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>   */<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  @Deprecated<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    return startMiniHBaseCluster(option);<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  /**<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>   * Starts up mini hbase cluster.<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   * @param numMasters Master node number.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @param numRegionServers Number of region servers.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>   * @return The mini HBase cluster created.<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   */<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  @Deprecated<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * @param servers number of region servers<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   */<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    this.restartHBaseCluster(servers, null);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      throws IOException, InterruptedException {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    StartMiniClusterOption option =<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    restartHBaseCluster(option);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    invalidateConnection();<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      throws IOException, InterruptedException {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    closeConnection();<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    this.hbaseCluster =<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>            option.getRsClass());<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    while (s.next() != null) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>      // do nothing<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    LOG.info("HBase has been restarted");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    s.close();<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    t.close();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    conn.close();<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   * to {@link #startMiniCluster()}.<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @see #startMiniCluster()<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>                               MiniHBaseCluster.class.getName());<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * @see #startMiniCluster(int)<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   */<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    LOG.info("Shutting down minicluster");<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>    shutdownMiniHBaseCluster();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    shutdownMiniDFSCluster();<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    shutdownMiniZKCluster();<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span><a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    cleanupTestDir();<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    miniClusterRunning = false;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    LOG.info("Minicluster is down");<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  }<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   */<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    cleanup();<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    if (this.hbaseCluster != null) {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>      this.hbaseCluster.shutdown();<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      this.hbaseCluster = null;<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (zooKeeperWatcher != null) {<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      zooKeeperWatcher.close();<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      zooKeeperWatcher = null;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  }<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span><a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  /**<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    cleanup();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    if (this.hbaseCluster != null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      getMiniHBaseCluster().killAll();<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      this.hbaseCluster = null;<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    if (zooKeeperWatcher != null) {<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>      zooKeeperWatcher.close();<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      zooKeeperWatcher = null;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  private void cleanup() throws IOException {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    closeConnection();<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  }<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  /**<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>   * before or not. If false, previous path is used.<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>   * Note: this does not cause the root dir to be created.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>   * @throws IOException<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>   */<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    if (!create) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return getDataTestDirOnTestFS();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } else {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      return getNewDataTestDirOnTestFS();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  /**<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Note: this does not cause the root dir to be created.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   * @throws IOException<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    return getDefaultRootDirPath(false);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>  }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  /**<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>   * method if you were doing manual operation.<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * @param create This flag decides whether to get a new<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   * If directory already exists, it will be overwritten<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   * @return Fully qualified path to hbase root dir<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   * @throws IOException<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   */<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    fs.mkdirs(hbaseRootdir);<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    return hbaseRootdir;<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * @return Fully qualified path to hbase root dir<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   * @throws IOException<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>   */<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  public Path createRootDir() throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>    return createRootDir(false);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span><a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Creates a hbase walDir in the user's home directory.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   * method if you were doing manual operation.<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>   *<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>   * @return Fully qualified path to hbase root dir<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>   * @throws IOException<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>  */<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  public Path createWALRootDir() throws IOException {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    fs.mkdirs(walDir);<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    return walDir;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>  }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span><a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    } else {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>  }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  /**<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>   * Flushes all caches in the mini hbase cluster<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>   * @throws IOException<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>   */<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  public void flush() throws IOException {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    getMiniHBaseCluster().flushcache();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  /**<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>   * Flushes all caches in the mini hbase cluster<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>   * @throws IOException<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>   */<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  public void flush(TableName tableName) throws IOException {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span><a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>   * Compact all regions in the mini hbase cluster<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>   * @throws IOException<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>   */<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>  public void compact(boolean major) throws IOException {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    getMiniHBaseCluster().compact(major);<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span><a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>   * @throws IOException<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>   */<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    getMiniHBaseCluster().compact(tableName, major);<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>   * Create a table.<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>   * @param tableName<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @param family<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   * @return A Table instance for the created table.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   * @throws IOException<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   */<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public Table createTable(TableName tableName, String family)<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  throws IOException{<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    return createTable(tableName, new String[]{family});<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   * Create a table.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>   * @param tableName<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>   * @param families<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>   * @return A Table instance for the created table.<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>   * @throws IOException<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   */<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  throws IOException {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    for (String family : families) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      fams.add(Bytes.toBytes(family));<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Create a table.<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * @param tableName<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   * @param family<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   * @return A Table instance for the created table.<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   * @throws IOException<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   */<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>  throws IOException{<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    return createTable(tableName, new byte[][]{family});<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>  /**<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * Create a table with multiple regions.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   * @param tableName<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   * @param family<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   * @param numRegions<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   * @return A Table instance for the created table.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   * @throws IOException<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>   */<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>      throws IOException {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  /**<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>   * Create a table.<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>   * @param tableName<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>   * @param families<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>   * @return A Table instance for the created table.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>   * @throws IOException<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>   */<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  throws IOException {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    return createTable(tableName, families, (byte[][]) null);<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>   * Create a table with multiple regions.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>   * @param tableName<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>   * @param families<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>   * @return A Table instance for the created table.<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>   * @throws IOException<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   */<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>  }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span><a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  /**<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>   * Create a table with multiple regions.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>   * @param tableName<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>   * @param replicaCount replica count.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>   * @param families<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>   * @return A Table instance for the created table.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>   * @throws IOException<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   */<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    throws IOException {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  /**<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>   * Create a table.<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>   * @param tableName<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>   * @param families<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>   * @param splitKeys<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>   * @return A Table instance for the created table.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>   * @throws IOException<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>   */<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      throws IOException {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Create a table.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   * @param tableName the table name<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>   * @param families the families<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>   * @param splitKeys the splitkeys<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>   * @param replicaCount the region replica count<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>   * @return A Table instance for the created table.<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>   * @throws IOException throws IOException<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>   */<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      int replicaCount) throws IOException {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      new Configuration(getConfiguration()));<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  }<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    // should wait until they are assigned<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    return getConnection().getTable(tableName);<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  /**<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   * Create a table.<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>   * @param c Configuration to use<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>   * @return A Table instance for the created table.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>   */<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    throws IOException {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return createTable(htd, families, null, c);<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>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Create a table.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   * @param htd table descriptor<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>   * @param families array of column families<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * @param splitKeys array of split keys<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   * @param c Configuration to use<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>   * @return A Table instance for the created table.<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>   */<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      Configuration c) throws IOException {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    // on is interfering.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Create a table.<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   * @param htd table descriptor<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>   * @param families array of column families<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>   * @param splitKeys array of split keys<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>   * @param type Bloom type<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>   * @param blockSize block size<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>   * @param c Configuration to use<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>   * @return A Table instance for the created table.<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   */<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span><a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    for (byte[] family : families) {<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>        .setBloomFilterType(type)<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>        .setBlocksize(blockSize);<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>          cfdb.setNewVersionBehavior(true);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      builder.setColumnFamily(cfdb.build());<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    TableDescriptor td = builder.build();<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    if (splitKeys != null) {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      getAdmin().createTable(td, splitKeys);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    } else {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      getAdmin().createTable(td);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    // we should wait until they are assigned<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    return getConnection().getTable(td.getTableName());<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>  }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  /**<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>   * Create a table.<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>   * @param htd table descriptor<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   * @param splitRows array of split keys<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>   * @return A Table instance for the created table.<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>   * @throws IOException<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>   */<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      throws IOException {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>           .setNewVersionBehavior(true).build());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    if (splitRows != null) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    } else {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      getAdmin().createTable(builder.build());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    // we should wait until they are assigned<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return getConnection().getTable(htd.getTableName());<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * Create a table.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param tableName the table name<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param families the families<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @param splitKeys the split keys<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   * @param replicaCount the replica count<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>   * @param c Configuration to use<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * @return A Table instance for the created table.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   */<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    TableDescriptor htd =<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    return createTable(htd, families, splitKeys, c);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>   * Create a table.<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>   * @return A Table instance for the created table.<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   */<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>  }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>  /**<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   * Create a table.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>   * @return A Table instance for the created table.<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>   */<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      throws IOException {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<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>  /**<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>   * Create a table.<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>   * @return A Table instance for the created table.<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>   */<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      byte[][] splitKeys) throws IOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    for (byte[] family : families) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>        .setMaxVersions(numVersions);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    if (splitKeys != null) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    } else {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      getAdmin().createTable(builder.build());<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    // assigned<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    return getConnection().getTable(tableName);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>  }<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>   * Create a table with multiple regions.<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   * @return A Table instance for the created table.<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>   */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      throws IOException {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  /**<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   * Create a table.<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>   * @return A Table instance for the created table.<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>   */<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    int numVersions, int blockSize) throws IOException {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    for (byte[] family : families) {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    getAdmin().createTable(builder.build());<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // assigned<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    return getConnection().getTable(tableName);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span><a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    for (byte[] family : families) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    if (cpName != null) {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      builder.setCoprocessor(cpName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    getAdmin().createTable(builder.build());<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    // assigned<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    return getConnection().getTable(tableName);<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  }<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span><a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>  /**<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>   * Create a table.<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>   * @return A Table instance for the created table.<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>   */<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    throws IOException {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    int i = 0;<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    for (byte[] family : families) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      i++;<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    getAdmin().createTable(builder.build());<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // assigned<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    return getConnection().getTable(tableName);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>  }<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>   * Create a table.<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>   * @return A Table instance for the created table.<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   */<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    throws IOException {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // assigned<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Create a table with multiple regions.<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * @return A Table instance for the created table.<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>  /**<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * Modify a table, synchronous.<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>   */<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>  @Deprecated<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      throws IOException, InterruptedException {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>    admin.modifyTable(desc);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * Set the number of Region replicas.<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    throws IOException, InterruptedException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      .setRegionReplication(replicaCount).build();<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    admin.modifyTable(desc);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  /**<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>   * Drop an existing table<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>   * @param tableName existing table<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>   */<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      getAdmin().disableTable(tableName);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    } catch (TableNotEnabledException e) {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    }<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    getAdmin().deleteTable(tableName);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>  }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span><a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  /**<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>   * Drop an existing table<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>   * @param tableName existing table<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>   */<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      deleteTable(tableName);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>    } catch (TableNotFoundException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      // ignore<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>  }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span><a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>  // ==========================================================================<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  // Canned table and table descriptor creation<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  private static final int MAXVERSIONS = 3;<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  public static final char FIRST_CHAR = 'a';<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  public static final char LAST_CHAR = 'z';<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span><a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>    return builder.build();<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>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    return builder;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  }<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>   * @param name Name to give table.<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>   * @return Column descriptor.<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   */<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    int maxVersions) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>    for (byte[] family : families) {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>    }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    return builder.build();<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span><a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  /**<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   * @param startKey the start boundary of the region<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>   * @param endKey the end boundary of the region<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>   * @return a region that writes to local dir for testing<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>   */<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    throws IOException {<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      .setEndKey(endKey).build();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    return createLocalHRegion(hri, desc);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  /**<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   */<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  }<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span><a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>  /**<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>   * @param info regioninfo<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>   * @param conf configuration<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>   * @param desc table descriptor<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>   * @param wal wal for this region.<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>   * @return created hregion<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>   * @throws IOException<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>   */<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      WAL wal) throws IOException {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span><a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>  /**<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>   * @param tableName<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>   * @param startKey<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * @param stopKey<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   * @param isReadOnly<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * @param families<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * @return A region on which you must call<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @throws IOException<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   */<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      throws IOException {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        durability, wal, null, families);<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    builder.setReadOnly(isReadOnly);<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    int i = 0;<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    for (byte[] family : families) {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>      i++;<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      // Set default to be three versions.<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    builder.setDurability(durability);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    RegionInfo info =<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>  }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span><a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  //<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  // ==========================================================================<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span><a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  /**<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>   * Provide an existing table name to truncate.<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>   * Scans the table and issues a delete for each row read.<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>   * @param tableName existing table<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>   * @return HTable to that new table<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>   * @throws IOException<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>   */<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    Table table = getConnection().getTable(tableName);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    Scan scan = new Scan();<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    for(Result res : resScan) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      Delete del = new Delete(res.getRow());<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>      table.delete(del);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    resScan = table.getScanner(scan);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    resScan.close();<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    return table;<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>  /**<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   * Truncate a table using the admin command.<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param tableName table which must exist.<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @param preserveRegions keep the existing split points<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   * @return HTable for the new table<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>   */<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      IOException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    Admin admin = getAdmin();<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      admin.disableTable(tableName);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>   * Truncate a table using the admin command.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>   * For previous behavior of issuing row deletes, see<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>   * deleteTableData.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>   * Expressly does not preserve regions of existing table.<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>   * @param tableName table which must exist.<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>   * @return HTable for the new table<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>   */<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    return truncateTable(tableName, false);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>  }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  /**<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>   * @param t Table<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>   * @param f Family<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>   * @return Count of rows loaded.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>   * @throws IOException<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>   */<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    return loadTable(t, new byte[][] {f});<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>  }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span><a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>  /**<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>   * @param t Table<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>   * @param f Family<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>   * @return Count of rows loaded.<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @throws IOException<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   */<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  /**<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   * @param t Table<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>   * @param f Array of Families to load<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>   * @return Count of rows loaded.<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @throws IOException<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   */<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    return loadTable(t, f, null);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  }<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>  /**<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>   * @param t Table<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>   * @param f Array of Families to load<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>   * @return Count of rows loaded.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>   * @throws IOException<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>   */<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    return loadTable(t, f, value, true);<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span><a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  /**<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * @param t Table<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   * @param f Array of Families to load<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   * @return Count of rows loaded.<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   * @throws IOException<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   */<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      boolean writeToWAL) throws IOException {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>      Put put = new Put(row);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>        byte[] value1 = value != null ? value : row;<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        put.addColumn(f[i], f[i], value1);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      puts.add(put);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>    }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    t.put(puts);<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    return puts.size();<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span><a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  /** A tracker for tracking and validating table rows<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   */<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  public static class SeenRowTracker {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    int dim = 'z' - 'a' + 1;<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    byte[] startRow;<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    byte[] stopRow;<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span><a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>      this.startRow = startRow;<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>      this.stopRow = stopRow;<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    void reset() {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      for (byte[] row : ROWS) {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span><a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    int i(byte b) {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>      return b - 'a';<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>    public void addRow(byte[] row) {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    }<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>     * all other rows none<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>     */<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    public void validate() {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>            int expectedCount = 0;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>              expectedCount = 1;<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>            }<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>            if (count != expectedCount) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>                  "instead of " + expectedCount);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>    }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  }<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>    return loadRegion(r, f, false);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>  }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    return loadRegion((HRegion)r, f);<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span><a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  /**<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * @param r Region<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * @param f Family<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   * @param flush flush the cache if true<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>   * @return Count of rows loaded.<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>   * @throws IOException<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>   */<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  throws IOException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    byte[] k = new byte[3];<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    int rowCount = 0;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          k[0] = b1;<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          k[1] = b2;<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          k[2] = b3;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          Put put = new Put(k);<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>          put.addColumn(f, null, k);<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>          if (r.getWAL() == null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>          }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>          int preRowCount = rowCount;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          int pause = 10;<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>          int maxPause = 1000;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>          while (rowCount == preRowCount) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>            try {<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>              r.put(put);<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>              rowCount++;<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>            } catch (RegionTooBusyException e) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>              Threads.sleep(pause);<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>            }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          }<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>        }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>      }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      if (flush) {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        r.flush(true);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>    }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>    return rowCount;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>      throws IOException {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      Put put = new Put(data);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      put.addColumn(f, null, data);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>      t.put(put);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    }<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      throws IOException {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    Random r = new Random();<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    byte[] row = new byte[rowSize];<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      r.nextBytes(row);<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      Put put = new Put(row);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      t.put(put);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int replicaId)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      throws IOException {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      Get get = new Get(data);<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      get.setReplicaId(replicaId);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      Result result = table.get(get);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      assertTrue(failMsg,<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>          cell.getValueLength()));<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    }<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>  }<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span><a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      throws IOException {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>  }<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span><a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      throws IOException {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      final boolean present) throws IOException {<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>  }<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span><a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      final boolean present) throws IOException {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>      Result result = region.get(new Get(data));<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span><a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      if (!present) continue;<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      assertTrue(failMsg,<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>          cell.getValueLength()));<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    }<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>  }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span><a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      throws IOException {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      Delete delete = new Delete(data);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      delete.addFamily(f);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      t.delete(delete);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>    }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>  }<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span><a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>  /**<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>   * Return the number of rows in the given table.<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>   * @param table to count rows<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>   * @return count of rows<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>   */<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  public static int countRows(final Table table) throws IOException {<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>    return countRows(table, new Scan());<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>  }<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span><a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      int count = 0;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      while (results.next() != null) {<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        count++;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>      return count;<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    Scan scan = new Scan();<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    for (byte[] family: families) {<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>      scan.addFamily(family);<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    }<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    return countRows(table, scan);<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  }<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span><a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>  /**<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>   * Return the number of rows in the given table.<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>   */<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    Table table = getConnection().getTable(tableName);<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    try {<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      return countRows(table);<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    } finally {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      table.close();<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>  }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span><a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>  public int countRows(final Region region) throws IOException {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    return countRows(region, new Scan());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>  }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span><a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>    try {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return countRows(scanner);<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    } finally {<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>      scanner.close();<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    }<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  }<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    int scannedCount = 0;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    boolean hasMore = true;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    while (hasMore) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>      hasMore = scanner.next(results);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      scannedCount += results.size();<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      results.clear();<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>    return scannedCount;<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>  }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span><a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>  /**<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>   */<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span><a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    Scan scan = new Scan();<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    ResultScanner results = table.getScanner(scan);<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>    for (Result res : results) {<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      digest.update(res.getRow());<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>    }<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    results.close();<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>    return digest.toString();<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>  }<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span><a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>  static {<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    int i = 0;<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          ROWS[i][0] = b1;<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>          ROWS[i][1] = b2;<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          ROWS[i][2] = b3;<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>          i++;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        }<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>      }<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    }<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>  }<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span><a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>  public static final byte[][] KEYS = {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>  };<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span><a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>      Bytes.toBytes("bbb"),<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>  };<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>  /**<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>   * want to form a proper range of regions.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>   * @param conf<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>   * @param htd<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>   * @param startKeys<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>   * @return list of region info for regions added to meta<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>   * @throws IOException<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>   */<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  throws IOException {<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    MetaTableAccessor<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>    // add custom ones<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>      int j = (i + 1) % startKeys.length;<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>          .setStartKey(startKeys[i])<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>          .setEndKey(startKeys[j])<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>          .build();<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      newRegions.add(hri);<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    }<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span><a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    meta.close();<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    return newRegions;<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>  }<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span><a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>  /**<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>   */<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      throws IOException {<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    // unless I pass along via the conf.<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<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">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    return (MiniHBaseCluster) hbaseCluster;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Starts up mini hbase cluster using default options.<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>   */<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>  }<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>   * Starts up mini hbase cluster.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * @param numMasters Master node number.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   * @param numRegionServers Number of region servers.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * @return The mini HBase cluster created.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>  @Deprecated<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      throws IOException, InterruptedException {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    return startMiniHBaseCluster(option);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>  /**<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>   * Starts up mini hbase cluster.<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   * @param numMasters Master node number.<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   * @param numRegionServers Number of region servers.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   * @return The mini HBase cluster created.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   */<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  @Deprecated<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    return startMiniHBaseCluster(option);<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  /**<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>   * Starts up mini hbase cluster.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   * @param numMasters Master node number.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * @param numRegionServers Number of region servers.<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>   * @return The mini HBase cluster created.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  @Deprecated<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    return startMiniHBaseCluster(option);<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  }<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span><a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>  /**<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   * @param servers number of region servers<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    this.restartHBaseCluster(servers, null);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      throws IOException, InterruptedException {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    StartMiniClusterOption option =<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    restartHBaseCluster(option);<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>    invalidateConnection();<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  }<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span><a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      throws IOException, InterruptedException {<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    closeConnection();<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    this.hbaseCluster =<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>            option.getRsClass());<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    while (s.next() != null) {<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      // do nothing<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    LOG.info("HBase has been restarted");<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>    s.close();<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    t.close();<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    conn.close();<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * to {@link #startMiniCluster()}.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * @see #startMiniCluster()<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>                               MiniHBaseCluster.class.getName());<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span><a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>  /**<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @see #startMiniCluster(int)<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    LOG.info("Shutting down minicluster");<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    shutdownMiniHBaseCluster();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    shutdownMiniDFSCluster();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    shutdownMiniZKCluster();<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    cleanupTestDir();<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    miniClusterRunning = false;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    LOG.info("Minicluster is down");<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  }<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  /**<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    cleanup();<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    if (this.hbaseCluster != null) {<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>      this.hbaseCluster.shutdown();<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      this.hbaseCluster = null;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    if (zooKeeperWatcher != null) {<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>      zooKeeperWatcher.close();<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>      zooKeeperWatcher = null;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    }<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>   */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    cleanup();<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    if (this.hbaseCluster != null) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      getMiniHBaseCluster().killAll();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      this.hbaseCluster = null;<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    if (zooKeeperWatcher != null) {<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      zooKeeperWatcher.close();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      zooKeeperWatcher = null;<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  private void cleanup() throws IOException {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    closeConnection();<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>  }<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span><a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  /**<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>   * before or not. If false, previous path is used.<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   * Note: this does not cause the root dir to be created.<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * @throws IOException<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   */<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    if (!create) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      return getDataTestDirOnTestFS();<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    } else {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      return getNewDataTestDirOnTestFS();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  /**<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>   * Note: this does not cause the root dir to be created.<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    return getDefaultRootDirPath(false);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>  }<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /**<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * method if you were doing manual operation.<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * @param create This flag decides whether to get a new<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * If directory already exists, it will be overwritten<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   * @return Fully qualified path to hbase root dir<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @throws IOException<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>    fs.mkdirs(hbaseRootdir);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>    return hbaseRootdir;<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  /**<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * @return Fully qualified path to hbase root dir<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * @throws IOException<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public Path createRootDir() throws IOException {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    return createRootDir(false);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  }<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>   * Creates a hbase walDir in the user's home directory.<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   * method if you were doing manual operation.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   *<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>   * @return Fully qualified path to hbase root dir<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>   * @throws IOException<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  */<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public Path createWALRootDir() throws IOException {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    fs.mkdirs(walDir);<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    return walDir;<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    } else {<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    }<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>  }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>  /**<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   * Flushes all caches in the mini hbase cluster<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>   * @throws IOException<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>   */<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>  public void flush() throws IOException {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    getMiniHBaseCluster().flushcache();<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>  }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>  /**<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>   * Flushes all caches in the mini hbase cluster<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>   * @throws IOException<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>   */<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  public void flush(TableName tableName) throws IOException {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  }<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>   * Compact all regions in the mini hbase cluster<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>   * @throws IOException<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   */<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  public void compact(boolean major) throws IOException {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    getMiniHBaseCluster().compact(major);<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>  }<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span><a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  /**<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>   * @throws IOException<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>   */<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    getMiniHBaseCluster().compact(tableName, major);<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>  /**<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   * Create a table.<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   * @param tableName<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   * @param family<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @return A Table instance for the created table.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   * @throws IOException<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  public Table createTable(TableName tableName, String family)<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  throws IOException{<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    return createTable(tableName, new String[]{family});<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>  }<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span><a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  /**<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   * Create a table.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   * @param tableName<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>   * @param families<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>   * @return A Table instance for the created table.<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>   * @throws IOException<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>  throws IOException {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    for (String family : families) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      fams.add(Bytes.toBytes(family));<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /**<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * Create a table.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   * @param tableName<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   * @param family<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   * @return A Table instance for the created table.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   * @throws IOException<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   */<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  throws IOException{<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    return createTable(tableName, new byte[][]{family});<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  }<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * Create a table with multiple regions.<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * @param tableName<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   * @param family<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   * @param numRegions<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   * @return A Table instance for the created table.<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>   * @throws IOException<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      throws IOException {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span><a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>  }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  /**<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * Create a table.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   * @param tableName<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>   * @param families<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>   * @return A Table instance for the created table.<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>   * @throws IOException<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>   */<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  throws IOException {<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    return createTable(tableName, families, (byte[][]) null);<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>  /**<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>   * Create a table with multiple regions.<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>   * @param tableName<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>   * @param families<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>   * @return A Table instance for the created table.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>   * @throws IOException<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>   */<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>  }<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>   * Create a table with multiple regions.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>   * @param tableName<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>   * @param replicaCount replica count.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>   * @param families<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>   * @return A Table instance for the created table.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>   * @throws IOException<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   */<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    throws IOException {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  /**<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>   * Create a table.<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>   * @param tableName<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>   * @param families<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>   * @param splitKeys<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>   * @return A Table instance for the created table.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>   * @throws IOException<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>   */<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      throws IOException {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span><a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>  /**<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>   * Create a table.<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>   * @param tableName the table name<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>   * @param families the families<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>   * @param splitKeys the splitkeys<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * @param replicaCount the region replica count<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   * @return A Table instance for the created table.<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>   * @throws IOException throws IOException<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>   */<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      int replicaCount) throws IOException {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      new Configuration(getConfiguration()));<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span><a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    // should wait until they are assigned<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return getConnection().getTable(tableName);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /**<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Create a table.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   * @param c Configuration to use<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>   * @return A Table instance for the created table.<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>   */<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    throws IOException {<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    return createTable(htd, families, null, c);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>  }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span><a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>  /**<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>   * Create a table.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>   * @param htd table descriptor<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>   * @param families array of column families<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>   * @param splitKeys array of split keys<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>   * @param c Configuration to use<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   * @return A Table instance for the created table.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      Configuration c) throws IOException {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // on is interfering.<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>  /**<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   * Create a table.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>   * @param htd table descriptor<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   * @param families array of column families<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>   * @param splitKeys array of split keys<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>   * @param type Bloom type<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>   * @param blockSize block size<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>   * @param c Configuration to use<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>   * @return A Table instance for the created table.<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>   * @throws IOException if getAdmin or createTable fails<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>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    for (byte[] family : families) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        .setBloomFilterType(type)<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>        .setBlocksize(blockSize);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>          cfdb.setNewVersionBehavior(true);<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      builder.setColumnFamily(cfdb.build());<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    TableDescriptor td = builder.build();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    if (splitKeys != null) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      getAdmin().createTable(td, splitKeys);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    } else {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      getAdmin().createTable(td);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    // we should wait until they are assigned<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    return getConnection().getTable(td.getTableName());<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>  }<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>  /**<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   * Create a table.<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>   * @param htd table descriptor<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>   * @param splitRows array of split keys<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>   * @return A Table instance for the created table.<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>   * @throws IOException<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>   */<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      throws IOException {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>           .setNewVersionBehavior(true).build());<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    if (splitRows != null) {<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    } else {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      getAdmin().createTable(builder.build());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    // we should wait until they are assigned<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    return getConnection().getTable(htd.getTableName());<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>  }<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span><a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>  /**<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * Create a table.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * @param tableName the table name<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   * @param families the families<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @param splitKeys the split keys<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   * @param replicaCount the replica count<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>   * @param c Configuration to use<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>   * @return A Table instance for the created table.<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>   */<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    TableDescriptor htd =<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>    return createTable(htd, families, splitKeys, c);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>  }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span><a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  /**<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   * Create a table.<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>   * @return A Table instance for the created table.<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>  }<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span><a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  /**<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>   * Create a table.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>   * @return A Table instance for the created table.<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>   */<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      throws IOException {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>  }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  /**<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>   * Create a table.<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>   * @return A Table instance for the created table.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>   */<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      byte[][] splitKeys) throws IOException {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    for (byte[] family : families) {<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        .setMaxVersions(numVersions);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    }<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    if (splitKeys != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    } else {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      getAdmin().createTable(builder.build());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // assigned<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    return getConnection().getTable(tableName);<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>  }<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span><a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  /**<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>   * Create a table with multiple regions.<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>   * @return A Table instance for the created table.<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>   */<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      throws IOException {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>  }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span><a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>  /**<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>   * Create a table.<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * @return A Table instance for the created table.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   */<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    int numVersions, int blockSize) throws IOException {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    for (byte[] family : families) {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      }<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    getAdmin().createTable(builder.build());<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    // assigned<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    return getConnection().getTable(tableName);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span><a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    for (byte[] family : families) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      }<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>    }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    if (cpName != null) {<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      builder.setCoprocessor(cpName);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    }<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    getAdmin().createTable(builder.build());<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    // assigned<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    return getConnection().getTable(tableName);<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>  }<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span><a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  /**<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>   * Create a table.<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>   * @return A Table instance for the created table.<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>   */<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    throws IOException {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    int i = 0;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>    for (byte[] family : families) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>      }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      i++;<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    getAdmin().createTable(builder.build());<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    // assigned<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>   * Create a table.<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>   * @return A Table instance for the created table.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>   */<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    throws IOException {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    // assigned<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    return getConnection().getTable(tableName);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span><a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>  /**<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>   * Create a table with multiple regions.<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>   * @return A Table instance for the created table.<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>   */<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>  }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span><a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  /**<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>   * Modify a table, synchronous.<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  @Deprecated<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      throws IOException, InterruptedException {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    admin.modifyTable(desc);<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>  }<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>   * Set the number of Region replicas.<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    throws IOException, InterruptedException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      .setRegionReplication(replicaCount).build();<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    admin.modifyTable(desc);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  /**<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>   * Drop an existing table<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>   * @param tableName existing table<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>   */<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    try {<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      getAdmin().disableTable(tableName);<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>    } catch (TableNotEnabledException e) {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    getAdmin().deleteTable(tableName);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>  }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span><a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  /**<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>   * Drop an existing table<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>   * @param tableName existing table<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>   */<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    try {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      deleteTable(tableName);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>    } catch (TableNotFoundException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      // ignore<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>  // ==========================================================================<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>  // Canned table and table descriptor creation<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span><a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  private static final int MAXVERSIONS = 3;<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  public static final char FIRST_CHAR = 'a';<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  public static final char LAST_CHAR = 'z';<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>  }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>    return builder.build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  }<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span><a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    return builder;<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>   * @param name Name to give table.<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>   * @return Column descriptor.<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>   */<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  }<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span><a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    int maxVersions) {<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    for (byte[] family : families) {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>      }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    return builder.build();<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>  }<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span><a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>  /**<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * @param startKey the start boundary of the region<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * @param endKey the end boundary of the region<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * @return a region that writes to local dir for testing<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   */<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    throws IOException {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      .setEndKey(endKey).build();<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>    return createLocalHRegion(hri, desc);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  }<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span><a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>  /**<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>  /**<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>   * @param info regioninfo<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>   * @param conf configuration<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>   * @param desc table descriptor<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>   * @param wal wal for this region.<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>   * @return created hregion<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>   * @throws IOException<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>   */<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      WAL wal) throws IOException {<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>  }<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>  /**<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>   * @param tableName<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>   * @param startKey<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>   * @param stopKey<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>   * @param isReadOnly<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>   * @param families<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>   * @return A region on which you must call<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>   * @throws IOException<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>   */<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      throws IOException {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        durability, wal, null, families);<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>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    builder.setReadOnly(isReadOnly);<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    int i = 0;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    for (byte[] family : families) {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      } else {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span><a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      }<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      i++;<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      // Set default to be three versions.<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    builder.setDurability(durability);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    RegionInfo info =<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span><a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  //<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  // ==========================================================================<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span><a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  /**<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>   * Provide an existing table name to truncate.<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>   * Scans the table and issues a delete for each row read.<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>   * @param tableName existing table<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>   * @return HTable to that new table<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>   * @throws IOException<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>   */<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    Table table = getConnection().getTable(tableName);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    Scan scan = new Scan();<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    for(Result res : resScan) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      Delete del = new Delete(res.getRow());<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      table.delete(del);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    resScan = table.getScanner(scan);<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    resScan.close();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    return table;<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>  }<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span><a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  /**<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * Truncate a table using the admin command.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   * @param tableName table which must exist.<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param preserveRegions keep the existing split points<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @return HTable for the new table<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   */<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>      IOException {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    Admin admin = getAdmin();<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      admin.disableTable(tableName);<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    return getConnection().getTable(tableName);<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>  }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span><a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  /**<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>   * Truncate a table using the admin command.<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * For previous behavior of issuing row deletes, see<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * deleteTableData.<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * Expressly does not preserve regions of existing table.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   * @param tableName table which must exist.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>   * @return HTable for the new table<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>   */<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    return truncateTable(tableName, false);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * @param t Table<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * @param f Family<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   * @return Count of rows loaded.<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>   * @throws IOException<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>   */<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    return loadTable(t, new byte[][] {f});<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>  }<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>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>   * @param t Table<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>   * @param f Family<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>   * @return Count of rows loaded.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>   * @throws IOException<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>   */<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span><a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>  /**<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>   * @param t Table<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>   * @param f Array of Families to load<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>   * @return Count of rows loaded.<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>   * @throws IOException<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>   */<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    return loadTable(t, f, null);<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  }<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span><a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  /**<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>   * @param t Table<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>   * @param f Array of Families to load<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>   * @return Count of rows loaded.<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>   * @throws IOException<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>   */<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    return loadTable(t, f, value, true);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span><a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>  /**<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   * @param t Table<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>   * @param f Array of Families to load<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>   * @return Count of rows loaded.<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>   * @throws IOException<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>   */<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      boolean writeToWAL) throws IOException {<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      Put put = new Put(row);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        byte[] value1 = value != null ? value : row;<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>        put.addColumn(f[i], f[i], value1);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      puts.add(put);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>    t.put(puts);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    return puts.size();<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span><a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  /** A tracker for tracking and validating table rows<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  public static class SeenRowTracker {<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>    int dim = 'z' - 'a' + 1;<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    byte[] startRow;<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    byte[] stopRow;<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>      this.startRow = startRow;<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>      this.stopRow = stopRow;<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    }<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span><a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    void reset() {<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      for (byte[] row : ROWS) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>      }<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span><a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    int i(byte b) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>      return b - 'a';<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span><a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    public void addRow(byte[] row) {<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    }<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>     * all other rows none<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>     */<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    public void validate() {<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>            int expectedCount = 0;<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>              expectedCount = 1;<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>            }<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>            if (count != expectedCount) {<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>                  "instead of " + expectedCount);<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>            }<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>          }<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        }<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<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>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    return loadRegion(r, f, false);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    return loadRegion((HRegion)r, f);<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span><a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>   * @param r Region<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>   * @param f Family<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>   * @param flush flush the cache if true<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>   * @return Count of rows loaded.<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>   * @throws IOException<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>   */<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>  throws IOException {<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    byte[] k = new byte[3];<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    int rowCount = 0;<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>          k[0] = b1;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>          k[1] = b2;<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>          k[2] = b3;<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          Put put = new Put(k);<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>          put.addColumn(f, null, k);<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>          if (r.getWAL() == null) {<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>          }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>          int preRowCount = rowCount;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>          int pause = 10;<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          int maxPause = 1000;<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>          while (rowCount == preRowCount) {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>            try {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>              r.put(put);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>              rowCount++;<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>            } catch (RegionTooBusyException e) {<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>              Threads.sleep(pause);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>            }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>      }<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      if (flush) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>        r.flush(true);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>    }<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return rowCount;<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      throws IOException {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      Put put = new Put(data);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      put.addColumn(f, null, data);<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>      t.put(put);<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      throws IOException {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    Random r = new Random();<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    byte[] row = new byte[rowSize];<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      r.nextBytes(row);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>      Put put = new Put(row);<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      t.put(put);<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span><a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      int replicaId)<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>      throws IOException {<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      Get get = new Get(data);<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      get.setReplicaId(replicaId);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      Result result = table.get(get);<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      assertTrue(failMsg,<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          cell.getValueLength()));<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    }<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  }<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span><a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      throws IOException {<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      final boolean present) throws IOException {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      final boolean present) throws IOException {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      Result result = region.get(new Get(data));<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span><a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      if (!present) continue;<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span><a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      assertTrue(failMsg,<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>          cell.getValueLength()));<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>    }<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>  }<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span><a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      throws IOException {<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      Delete delete = new Delete(data);<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      delete.addFamily(f);<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      t.delete(delete);<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>    }<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>  }<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span><a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>  /**<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>   * Return the number of rows in the given table.<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>   * @param table to count rows<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>   * @return count of rows<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   */<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>  public static int countRows(final Table table) throws IOException {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>    return countRows(table, new Scan());<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>  }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      int count = 0;<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      while (results.next() != null) {<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        count++;<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>      }<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>      return count;<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>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    Scan scan = new Scan();<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    for (byte[] family: families) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>      scan.addFamily(family);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    }<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return countRows(table, scan);<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  /**<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>   * Return the number of rows in the given table.<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>   */<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    Table table = getConnection().getTable(tableName);<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    try {<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      return countRows(table);<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      table.close();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>  }<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span><a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>  public int countRows(final Region region) throws IOException {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    return countRows(region, new Scan());<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span><a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    try {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      return countRows(scanner);<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>    } finally {<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>      scanner.close();<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    }<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>  }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>    int scannedCount = 0;<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>    boolean hasMore = true;<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>    while (hasMore) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>      hasMore = scanner.next(results);<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      scannedCount += results.size();<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>      results.clear();<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>    return scannedCount;<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  }<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span><a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>  /**<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>   */<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span><a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    Scan scan = new Scan();<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    ResultScanner results = table.getScanner(scan);<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>    for (Result res : results) {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>      digest.update(res.getRow());<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>    }<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>    results.close();<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>    return digest.toString();<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>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>  static {<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>    int i = 0;<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          ROWS[i][0] = b1;<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>          ROWS[i][1] = b2;<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>          ROWS[i][2] = b3;<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>          i++;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        }<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      }<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span><a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  public static final byte[][] KEYS = {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<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>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      Bytes.toBytes("bbb"),<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  };<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span><a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>  /**<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>   * want to form a proper range of regions.<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>   * @param conf<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>   * @param htd<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>   * @param startKeys<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>   * @return list of region info for regions added to meta<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>   * @throws IOException<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>   */<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>  throws IOException {<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    MetaTableAccessor<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    // add custom ones<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      int j = (i + 1) % startKeys.length;<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>          .setStartKey(startKeys[i])<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>          .setEndKey(startKeys[j])<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>          .build();<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>      newRegions.add(hri);<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span><a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    meta.close();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>    return newRegions;<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  }<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span><a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  /**<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>   */<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>      throws IOException {<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>    // unless I pass along via the conf.<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>  }<a name="line.2508"></a>
 <span class="sourceLineNo">2509</span><a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  /**<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   */<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  /**<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   */<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws IOException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    region.setBlockCache(blockCache);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>    region.initialize();<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>   */<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      throws IOException {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>    region.setMobFileCache(mobFileCache);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    region.initialize();<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>    return region;<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>  }<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span><a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>  /**<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>   */<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      throws IOException {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>  }<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span><a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>  /**<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   * Returns all rows from the hbase:meta table.<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>   *<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>   * @throws IOException When reading the rows fails.<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>   */<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>    for (Result result : s) {<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      rows.add(result.getRow());<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>    }<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>    s.close();<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>    t.close();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>    return rows;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>  }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  /**<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>   *<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>   * @throws IOException When reading the rows fails.<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>   */<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    for (Result result : s) {<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      if (info == null) {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        // TODO figure out what to do for this new hosed case.<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      if (info.getTable().equals(tableName)) {<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        rows.add(result.getRow());<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    s.close();<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    t.close();<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>    return rows;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>  }<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span><a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>  /**<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>   * Returns all regions of the specified table<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>   *<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>   * @param tableName the table name<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>   * @return all regions of the specified table<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>   * @throws IOException when getting the regions fails.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>   */<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      return admin.getRegions(tableName);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>  }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span><a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>  /*<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>   * @param rs<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>   * @return another region server<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>   */<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        return rst.getRegionServer();<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      }<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    return null;<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>  /**<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>   * Tool to get the reference to the region server object that holds the<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>   * region of the specified user table.<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>   * @throws IOException<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @throws InterruptedException<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      throws IOException, InterruptedException {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>    if (regions == null || regions.isEmpty()) {<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      return null;<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>    }<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>        tableName);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    byte[] firstRegionName = regions.stream()<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>        .filter(r -&gt; !r.isOffline())<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        .map(RegionInfo::getRegionName)<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        .findFirst()<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>    while(retrier.shouldRetry()) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      if (index != -1) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      retrier.sleepUntilNextRetry();<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    }<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return null;<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span><a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   *<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @throws IOException When starting the cluster fails.<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   */<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    conf.setIfUnset(<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        "99.0");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    startMiniMapReduceCluster(2);<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    return mrCluster;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  }<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span><a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>  /**<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>   * will not change its internal static LOG_DIR variable.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>   */<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>  private void forceChangeTaskLogDir() {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>    Field logDirField;<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>    try {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      logDirField.setAccessible(true);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span><a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      modifiersField.setAccessible(true);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>    } catch (SecurityException e) {<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>      throw new RuntimeException(e);<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>    } catch (NoSuchFieldException e) {<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      throw new RuntimeException(e);<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>    } catch (IllegalArgumentException e) {<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>      throw new RuntimeException(e);<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    } catch (IllegalAccessException e) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      throw new RuntimeException(e);<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>  }<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span><a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>  /**<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>   * filesystem.<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>   * @throws IOException When starting the cluster fails.<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>   */<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    if (mrCluster != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>    }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>    setupClusterTestDir();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>    createDirsAndSetProperties();<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span><a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>    forceChangeTaskLogDir();<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>    //// hadoop2 specific settings<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>    // we up the VM usable so that processes don't get killed.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span><a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    ////<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span><a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      null, null, new JobConf(this.conf));<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    if (jobConf == null) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      jobConf = mrCluster.createJobConf();<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span><a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span><a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>    // this for mrv2 support; mr1 ignores this<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>    if (rmAddress != null) {<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>    }<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>    if (historyAddress != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    }<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    String schedulerAddress =<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    if (schedulerAddress != null) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    String mrJobHistoryWebappAddress =<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    String yarnRMWebappAddress =<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>    if (yarnRMWebappAddress != null) {<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>    }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>  }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span><a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>  /**<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>   */<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    if (mrCluster != null) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      mrCluster.shutdown();<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>      mrCluster = null;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>    }<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Restore configuration to point to local jobtracker<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    conf.set("mapreduce.jobtracker.address", "local");<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>  /**<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>   */<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return createMockRegionServerService((ServerName)null);<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  /**<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>   * This version is used by TestTokenAuthentication<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      IOException {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>    rss.setRpcServer(rpc);<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return rss;<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  /**<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>   * This version is used by TestOpenRegionHandler<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   */<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>    return rss;<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span><a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  /**<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   */<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>  @Deprecated<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    Log4jUtils.enableDebug(clazz);<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  /**<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>   * Expire the Master's session<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>   * @throws Exception<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  public void expireMasterSession() throws Exception {<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>    expireSession(master.getZooKeeper(), false);<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>  }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span><a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  /**<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   * Expire a region server's session<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>   * @param index which RS<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>   */<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    decrementMinRegionServerCount();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  }<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span><a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  private void decrementMinRegionServerCount() {<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    // this.hbaseCluster shares this configuration too<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span><a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>    // each master thread keeps a copy of configuration<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<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><a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    int currentCount = conf.getInt(<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>    if (currentCount != -1) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>          Math.max(currentCount - 1, 1));<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>  }<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span><a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>   expireSession(nodeZK, false);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>  }<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span><a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  /**<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>   * There are issues when doing this:<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>   *<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>   *                    current configuration.<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>   */<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    throws Exception {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    Configuration c = new Configuration(this.conf);<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    byte[] password = zk.getSessionPasswd();<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>    long sessionID = zk.getSessionId();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    //  so we create a first watcher to be sure that the<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    //  other watchers on the same machine will get is as well.<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>    //  closing the connection should be enough.<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>      @Override<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    } , sessionID, password);<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span><a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    // Making it expire<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span><a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    while (newZK.getState() != States.CONNECTED<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>       Thread.sleep(1);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>    newZK.close();<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span><a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>    monitor.close();<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span><a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    if (checkStatus) {<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    }<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>  }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  /**<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>   * Get the Mini HBase cluster.<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>   *<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * @return hbase cluster<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * @see #getHBaseClusterInterface()<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   */<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    return getMiniHBaseCluster();<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  }<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  /**<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>   * Returns the HBaseCluster instance.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>   * need to type-cast.<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>   */<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    //but this would require refactoring 90+ calls.<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    return hbaseCluster;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  /**<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>   * the connection is not valid anymore.<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>   */<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>  public void invalidateConnection() throws IOException {<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    closeConnection();<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    // Update the master addresses if they changed.<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>        masterConfigBefore, masterConfAfter);<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  }<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>   * Get a shared Connection to the cluster.<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>   * this method is thread safe.<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>   */<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public Connection getConnection() throws IOException {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return getAsyncConnection().toConnection();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * Get a assigned Connection to the cluster.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * this method is thread safe.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * @param user assigned user<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * @return A Connection with assigned user.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Connection getConnection(User user) throws IOException {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    return getAsyncConnection(user).toConnection();<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>  /**<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>   * this method is thread safe.<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>   */<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>    try {<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        if (connection == null) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>          try {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>            connection = getAsyncConnection(user);<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>          } catch(IOException ioe) {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>          }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        }<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>        return connection;<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>      });<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    } catch (UncheckedIOException exception) {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>      throw exception.getCause();<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    }<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  }<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>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>   * this method is thread safe.<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>   * @param user assigned user<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>   */<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  }<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span><a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  public void closeConnection() throws IOException {<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    if (hbaseAdmin != null) {<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>      Closeables.close(hbaseAdmin, true);<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>      hbaseAdmin = null;<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    if (asyncConnection != null) {<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>      Closeables.close(asyncConnection, true);<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><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>    if (hbaseAdmin == null){<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    }<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return hbaseAdmin;<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>  private Admin hbaseAdmin = null;<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span><a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  /**<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   */<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public Hbck getHbck() throws IOException {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    return getConnection().getHbck();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span><a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>  /**<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>   * Unassign the named region.<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   *<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   * @param regionName  The region to unassign.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>   */<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    unassignRegion(Bytes.toBytes(regionName));<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>  }<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>   * Unassign the named region.<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>   *<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>   * @param regionName  The region to unassign.<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>   */<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    getAdmin().unassign(regionName, true);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  }<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  /**<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>   * Closes the region containing the given row.<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>   *<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @param row  The row to find the containing region.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param table  The table to find the region.<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>  }<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span><a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>  /**<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   * Closes the region containing the given row.<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>   *<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>   * @param row  The row to find the containing region.<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>   * @param table  The table to find the region.<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>   * @throws IOException<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>   */<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>  }<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span><a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  /**<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * Retrieves a splittable region randomly from tableName<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * @param tableName name of table<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>   */<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>    int regCount = regions.size();<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>    int idx;<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    int attempts = 0;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>    do {<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      if (regCount != regions.size()) {<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>        // if there was region movement, clear attempted Set<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>        attempted.clear();<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>      }<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      regCount = regions.size();<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>      if (regCount &gt; 0) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>        idx = random.nextInt(regCount);<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        // if we have just tried this region, there is no need to try again<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        if (attempted.contains(idx)) {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>          continue;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>        }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>        HRegion region = regions.get(idx);<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>        if (region.checkSplit().isPresent()) {<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>          return region;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>        attempted.add(idx);<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      }<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>      attempts++;<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return null;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    return dfsCluster;<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span><a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>    setDFSCluster(cluster, true);<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  }<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span><a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>  /**<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * Set the MiniDFSCluster<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param cluster cluster to use<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   * it is set.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>   */<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>      throws IllegalStateException, IOException {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>    this.dfsCluster = cluster;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>    this.setFs();<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    return HFileSystem.get(conf);<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  }<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span><a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>  /**<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>   * (30 seconds).<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>   * @param table Table to wait on.<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>   * @throws InterruptedException<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>   * @throws IOException<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>   */<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  public void waitTableAvailable(TableName table)<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      throws InterruptedException, IOException {<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span><a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>      throws InterruptedException, IOException {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>  }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span><a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>  /**<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>   * Wait until all regions in a table have been assigned<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>   * @param table Table to wait on.<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>   * @param timeoutMillis Timeout.<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>   */<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>      throws InterruptedException, IOException {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>  }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span><a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        .getRegionStates().getRegionAssignments();<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        ServerName sn = metaLocation.getSecond();<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        if (!assignments.containsKey(hri)) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span><a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        } else if (sn == null) {<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>        }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>      }<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>    }<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>      throws IOException {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    if (tableState == null) {<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } else if (!tableState.inStates(state)) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>    } else {<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>      return "TableState in META: OK";<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>    }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>  }<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span><a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>  @Nullable<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>      @Override<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>      public boolean visit(Result r) throws IOException {<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>          return false;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>        }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>        if (state != null) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>          lastTableState.set(state);<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>        }<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>        return true;<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>      }<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>    };<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>    return lastTableState.get();<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>  }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span><a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>  /**<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>   * Tolerates nonexistent table.<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>   * @param table the table to wait on.<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>   * @throws IOException if an IO problem is encountered<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>   */<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>  public void waitTableEnabled(TableName table)<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      throws InterruptedException, IOException {<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    waitTableEnabled(table, 30000);<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>  }<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span><a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>  /**<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * regions have been all assigned.<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>   * @param table Table to wait on.<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>   * @throws InterruptedException<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>   * @throws IOException<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>   */<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>  throws InterruptedException, IOException {<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>  throws IOException {<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>  }<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span><a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>  /**<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>   * Will timeout after default period (30 seconds)<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>   * @param table Table to wait on.<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>   * @throws InterruptedException<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>   * @throws IOException<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>   */<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>  public void waitTableDisabled(byte[] table)<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>          throws InterruptedException, IOException {<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>    waitTableDisabled(table, 30000);<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>  }<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span><a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>          throws InterruptedException, IOException {<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>  }<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span><a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  /**<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>   * @param table Table to wait on.<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @throws InterruptedException<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   * @throws IOException<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>   */<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>          throws InterruptedException, IOException {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>  /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * Make sure that at least the specified number of region servers<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   * are running<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   * @param num minimum number of region servers that should be running<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>   * @return true if we started some servers<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>   * @throws IOException<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>   */<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>      throws IOException {<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>    boolean startedServer = false;<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>      startedServer = true;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>    }<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span><a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>    return startedServer;<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>  }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span><a name="line.3339"></a>
+<span class="sourceLineNo">2510</span><a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  /**<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>   */<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>  }<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span><a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>  /**<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>   */<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      throws IOException {<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>    region.setBlockCache(blockCache);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    region.initialize();<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>   */<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      throws IOException {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>    region.setMobFileCache(mobFileCache);<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>    region.initialize();<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    return region;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>  }<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span><a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>  /**<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>   */<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      throws IOException {<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>  }<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span><a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>  /**<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>   * Returns all rows from the hbase:meta table.<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   *<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @throws IOException When reading the rows fails.<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   */<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>    for (Result result : s) {<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      rows.add(result.getRow());<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    }<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>    s.close();<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>    t.close();<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>    return rows;<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  }<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span><a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  /**<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>   *<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * @throws IOException When reading the rows fails.<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   */<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    for (Result result : s) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>      if (info == null) {<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>        // TODO figure out what to do for this new hosed case.<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>        continue;<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span><a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      if (info.getTable().equals(tableName)) {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>        rows.add(result.getRow());<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      }<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    s.close();<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>    t.close();<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>    return rows;<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  }<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span><a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>  /**<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>   * Returns all regions of the specified table<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>   *<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>   * @param tableName the table name<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>   * @return all regions of the specified table<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * @throws IOException when getting the regions fails.<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   */<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      return admin.getRegions(tableName);<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>  }<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span><a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>  /*<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>   * @param rs<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>   * @return another region server<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>   */<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>        return rst.getRegionServer();<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>      }<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>    }<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    return null;<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>  }<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>  /**<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>   * Tool to get the reference to the region server object that holds the<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>   * region of the specified user table.<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>   * @throws IOException<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>   * @throws InterruptedException<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>   */<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      throws IOException, InterruptedException {<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (regions == null || regions.isEmpty()) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      return null;<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    }<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        tableName);<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span><a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    byte[] firstRegionName = regions.stream()<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        .filter(r -&gt; !r.isOffline())<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>        .map(RegionInfo::getRegionName)<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>        .findFirst()<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    while(retrier.shouldRetry()) {<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      if (index != -1) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      retrier.sleepUntilNextRetry();<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    return null;<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  /**<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   *<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   * @throws IOException When starting the cluster fails.<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    conf.setIfUnset(<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>        "99.0");<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    startMiniMapReduceCluster(2);<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>    return mrCluster;<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>  }<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span><a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>  /**<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * will not change its internal static LOG_DIR variable.<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  private void forceChangeTaskLogDir() {<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>    Field logDirField;<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    try {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>      logDirField.setAccessible(true);<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      modifiersField.setAccessible(true);<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>    } catch (SecurityException e) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>      throw new RuntimeException(e);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>    } catch (NoSuchFieldException e) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>      throw new RuntimeException(e);<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    } catch (IllegalArgumentException e) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      throw new RuntimeException(e);<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    } catch (IllegalAccessException e) {<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>      throw new RuntimeException(e);<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>    }<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>  }<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span><a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>  /**<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>   * filesystem.<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>   * @throws IOException When starting the cluster fails.<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>   */<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>    if (mrCluster != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>    }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>    setupClusterTestDir();<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>    createDirsAndSetProperties();<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    forceChangeTaskLogDir();<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span><a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>    //// hadoop2 specific settings<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    // we up the VM usable so that processes don't get killed.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span><a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>    ////<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span><a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>      null, null, new JobConf(this.conf));<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>    if (jobConf == null) {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>      jobConf = mrCluster.createJobConf();<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    }<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span><a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span><a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    // this for mrv2 support; mr1 ignores this<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (rmAddress != null) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    if (historyAddress != null) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>    String schedulerAddress =<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>    if (schedulerAddress != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    }<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>    String mrJobHistoryWebappAddress =<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>    }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    String yarnRMWebappAddress =<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    if (yarnRMWebappAddress != null) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>  }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span><a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>  /**<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   */<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>    if (mrCluster != null) {<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      mrCluster.shutdown();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      mrCluster = null;<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>    }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>    // Restore configuration to point to local jobtracker<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    conf.set("mapreduce.jobtracker.address", "local");<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>  }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span><a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>  /**<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>   */<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return createMockRegionServerService((ServerName)null);<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   * This version is used by TestTokenAuthentication<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>   */<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>      IOException {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    rss.setRpcServer(rpc);<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return rss;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  /**<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>   * This version is used by TestOpenRegionHandler<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>   */<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return rss;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>   */<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>  @Deprecated<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>    Log4jUtils.enableDebug(clazz);<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span><a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>  /**<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * Expire the Master's session<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   * @throws Exception<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>   */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>  public void expireMasterSession() throws Exception {<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    expireSession(master.getZooKeeper(), false);<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>  }<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>   * Expire a region server's session<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @param index which RS<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>    decrementMinRegionServerCount();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span><a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>  private void decrementMinRegionServerCount() {<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>    // this.hbaseCluster shares this configuration too<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>    // each master thread keeps a copy of configuration<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>    }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  }<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span><a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>    int currentCount = conf.getInt(<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    if (currentCount != -1) {<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>          Math.max(currentCount - 1, 1));<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    }<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span><a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>   expireSession(nodeZK, false);<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>  }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  /**<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   * There are issues when doing this:<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>   *<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>   *                    current configuration.<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   */<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    throws Exception {<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>    Configuration c = new Configuration(this.conf);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>    byte[] password = zk.getSessionPasswd();<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    long sessionID = zk.getSessionId();<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span><a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    //  so we create a first watcher to be sure that the<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    //  other watchers on the same machine will get is as well.<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    //  closing the connection should be enough.<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>      @Override<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>      }<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    } , sessionID, password);<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span><a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    // Making it expire<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span><a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    while (newZK.getState() != States.CONNECTED<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>       Thread.sleep(1);<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    }<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>    newZK.close();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span><a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>    monitor.close();<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>    if (checkStatus) {<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>  }<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>   * Get the Mini HBase cluster.<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>   *<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return hbase cluster<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   * @see #getHBaseClusterInterface()<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    return getMiniHBaseCluster();<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>  }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>  /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>   * Returns the HBaseCluster instance.<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>   * need to type-cast.<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   */<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    //but this would require refactoring 90+ calls.<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    return hbaseCluster;<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>  }<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>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>   * the connection is not valid anymore.<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public void invalidateConnection() throws IOException {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    closeConnection();<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    // Update the master addresses if they changed.<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>        masterConfigBefore, masterConfAfter);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<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>  /**<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   * Get a shared Connection to the cluster.<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * this method is thread safe.<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   */<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public Connection getConnection() throws IOException {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return getAsyncConnection().toConnection();<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * Get a assigned Connection to the cluster.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   * this method is thread safe.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>   * @param user assigned user<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>   * @return A Connection with assigned user.<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>   */<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>  public Connection getConnection(User user) throws IOException {<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    return getAsyncConnection(user).toConnection();<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   * this method is thread safe.<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    try {<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>        if (connection == null) {<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>          try {<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>            connection = getAsyncConnection(user);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>          } catch(IOException ioe) {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>          }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        }<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>        return connection;<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>      });<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>    } catch (UncheckedIOException exception) {<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>      throw exception.getCause();<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    }<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>  /**<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>   * this method is thread safe.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>   * @param user assigned user<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>   */<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  public void closeConnection() throws IOException {<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>    if (hbaseAdmin != null) {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>      Closeables.close(hbaseAdmin, true);<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>      hbaseAdmin = null;<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>    if (asyncConnection != null) {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>      Closeables.close(asyncConnection, true);<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span><a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>  /**<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    if (hbaseAdmin == null){<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>    }<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>    return hbaseAdmin;<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  }<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span><a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  private Admin hbaseAdmin = null;<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  public Hbck getHbck() throws IOException {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return getConnection().getHbck();<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span><a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>   * Unassign the named region.<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>   *<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>   * @param regionName  The region to unassign.<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>   */<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>    unassignRegion(Bytes.toBytes(regionName));<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>  /**<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>   * Unassign the named region.<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>   *<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>   * @param regionName  The region to unassign.<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>   */<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    getAdmin().unassign(regionName, true);<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>  }<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span><a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>  /**<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>   * Closes the region containing the given row.<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>   *<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>   * @param row  The row to find the containing region.<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>   * @param table  The table to find the region.<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>   */<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>  }<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>   * Closes the region containing the given row.<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>   *<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>   * @param row  The row to find the containing region.<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>   * @param table  The table to find the region.<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>   * @throws IOException<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>   */<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Retrieves a splittable region randomly from tableName<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * @param tableName name of table<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>   */<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>    int regCount = regions.size();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>    int idx;<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    int attempts = 0;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    do {<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>      if (regCount != regions.size()) {<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>        // if there was region movement, clear attempted Set<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>        attempted.clear();<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>      }<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>      regCount = regions.size();<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>      if (regCount &gt; 0) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>        idx = random.nextInt(regCount);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>        // if we have just tried this region, there is no need to try again<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>        if (attempted.contains(idx)) {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>          continue;<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>        }<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        HRegion region = regions.get(idx);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        if (region.checkSplit().isPresent()) {<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>          return region;<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>        }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>        attempted.add(idx);<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>      attempts++;<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    return null;<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  }<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span><a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>    return dfsCluster;<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>  }<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    setDFSCluster(cluster, true);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span><a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>  /**<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>   * Set the MiniDFSCluster<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>   * @param cluster cluster to use<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>   * it is set.<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>   */<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>      throws IllegalStateException, IOException {<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>    }<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    this.dfsCluster = cluster;<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>    this.setFs();<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>  }<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span><a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    return HFileSystem.get(conf);<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>  /**<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>   * (30 seconds).<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>   * @param table Table to wait on.<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>   * @throws InterruptedException<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>   * @throws IOException<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>   */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>  public void waitTableAvailable(TableName table)<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>      throws InterruptedException, IOException {<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>  }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      throws InterruptedException, IOException {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span><a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  /**<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>   * Wait until all regions in a table have been assigned<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>   * @param table Table to wait on.<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>   * @param timeoutMillis Timeout.<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>   */<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>      throws InterruptedException, IOException {<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<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>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        .getRegionStates().getRegionAssignments();<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>        ServerName sn = metaLocation.getSecond();<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>        if (!assignments.containsKey(hri)) {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span><a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>        } else if (sn == null) {<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>        }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>      }<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    }<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>      throws IOException {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>    if (tableState == null) {<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    } else if (!tableState.inStates(state)) {<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>    } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>      return "TableState in META: OK";<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>    }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>  }<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span><a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>  @Nullable<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>      @Override<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>      public boolean visit(Result r) throws IOException {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>          return false;<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>        }<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>        if (state != null) {<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>          lastTableState.set(state);<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>        }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>        return true;<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>      }<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>    };<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>    return lastTableState.get();<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>  }<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span><a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>  /**<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * Tolerates nonexistent table.<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   * @param table the table to wait on.<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @throws IOException if an IO problem is encountered<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   */<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>  public void waitTableEnabled(TableName table)<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>      throws InterruptedException, IOException {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    waitTableEnabled(table, 30000);<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  }<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span><a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>  /**<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>   * regions have been all assigned.<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>   * @param table Table to wait on.<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>   * @throws InterruptedException<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>   * @throws IOException<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>   */<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>  throws InterruptedException, IOException {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>  }<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span><a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>  throws IOException {<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>  }<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span><a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>  /**<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>   * Will timeout after default period (30 seconds)<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>   * @param table Table to wait on.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>   * @throws InterruptedException<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>   * @throws IOException<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>   */<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>  public void waitTableDisabled(byte[] table)<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>          throws InterruptedException, IOException {<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>    waitTableDisabled(table, 30000);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>  }<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span><a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>          throws InterruptedException, IOException {<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span><a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>  /**<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>   * @param table Table to wait on.<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>   * @throws InterruptedException<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>   * @throws IOException<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>   */<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>          throws InterruptedException, IOException {<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  }<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span><a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>  /**<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>   * Make sure that at least the specified number of region servers<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>   * are running<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>   * @param num minimum number of region servers that should be running<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>   * @return true if we started some servers<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>   * @throws IOException<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>   */<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      throws IOException {<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    boolean startedServer = false;<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>      startedServer = true;<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>    }<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span><a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>    return startedServer;<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  }<a name="line.3339"></a>
 <span class="sourceLineNo">3340</span><a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>  /**<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * Make sure that at least the specified number of region servers<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * stopped.<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   * @param num minimum number of region servers that should be running<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>   * @return true if we started some servers<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>   * @throws IOException<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>   */<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    throws IOException {<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span><a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    int nonStoppedServers = 0;<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span><a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>      } else {<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>        nonStoppedServers++;<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>      }<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>    }<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      startedServer = true;<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    }<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return startedServer;<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
+<span class="sourceLineNo">3341</span><a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>  /**<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>   * Make sure that at least the specified number of region servers<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>   * stopped.<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>   * @param num minimum number of region servers that should be running<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>   * @return true if we started some servers<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>   * @throws IOException<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>   */<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>    throws IOException {<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    int nonStoppedServers = 0;<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span><a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      } else {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        nonStoppedServers++;<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      }<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>    }<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      startedServer = true;<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    return startedServer;<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>  }<a name="line.3370"></a>
 <span class="sourceLineNo">3371</span><a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>  /**<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>   * @param c Initial configuration<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>   * @return A new configuration instance with a different user set into it.<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>   * @throws IOException<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>   */<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>  public static User getDifferentUser(final Configuration c,<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>    final String differentiatingSuffix)<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>  throws IOException {<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>      return User.getCurrent();<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>    }<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>    String username = User.getCurrent().getName() +<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      differentiatingSuffix;<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>    User user = User.createUserForTesting(c, username,<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>        new String[]{"supergroup"});<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return user;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>      throws IOException {<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>      try {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>        for (RegionInfo region :<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>          online.add(region.getRegionNameAsString());<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>        }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>      } catch (RegionServerStoppedException e) {<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>        // That's fine.<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      }<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>    }<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>      try {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>        for (RegionInfo region :<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>          online.add(region.getRegionNameAsString());<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>        }<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>      } catch (RegionServerStoppedException e) {<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>        // That's fine.<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      } catch (ServerNotRunningYetException e) {<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>        // That's fine.<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>      }<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>    return online;<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  }<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  /**<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>   * &lt;pre&gt;<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * &lt;/pre&gt;<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   * @param max<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @throws NoSuchFieldException<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   * @throws SecurityException<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>   * @throws IllegalAccessException<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>   * @throws IllegalArgumentException<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>   */<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      final int max) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>    try {<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>        String className = clazz.getSimpleName();<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>        if (className.equals("DFSOutputStream")) {<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>          if (clazz.isInstance(stream)) {<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>            Field maxRecoveryErrorCountField =<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>            break;<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>          }<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>        }<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>      }<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>    } catch (Exception e) {<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>      LOG.info("Could not set max recovery field", e);<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  }<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span><a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>  /**<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * has completed assignment.<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * @return true if the region is assigned false otherwise.<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   */<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>      throws IOException, InterruptedException {<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>    am.assign(regionInfo);<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  /**<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>   *<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>   * @param destRegion region to move<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>   * @param destServer destination server of the region<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>   * @throws InterruptedException<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>   * @throws IOException<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>   */<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>      throws InterruptedException, IOException {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>    while (true) {<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>          .getRegionServerOfRegion(destRegion);<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>        break;<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      }<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>      Thread.sleep(10);<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>    }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>  }<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span><a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>  /**<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>   * This means all regions have been deployed,<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>   * server.<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>   * @param tableName the table name<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>   * @throws IOException<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>   */<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span><a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>   * Waith until all system table's regions get assigned<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>   * @throws IOException<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  }<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span><a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  /**<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>   * server.<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>   * @param tableName the table name<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>   * @param timeout timeout, in milliseconds<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>   * @throws IOException<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>   */<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>      throws IOException {<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>            timeout + "ms");<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>          @Override<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>          public String explainFailure() throws IOException {<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>            return explainTableAvailability(tableName);<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>          }<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span><a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>          @Override<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>          public boolean evaluate() throws IOException {<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>            Scan scan = new Scan();<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>            boolean tableFound = false;<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>                  // (for fault tolerance testing).<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>                  tableFound = true;<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>                  byte[] server =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>                  if (server == null) {<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>                    return false;<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>                  } else {<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>                    byte[] startCode =<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>                    ServerName serverName =<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>                            Bytes.toLong(startCode));<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>                      return false;<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>                    }<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>                  }<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>                    return false;<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>                  }<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>                }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>              }<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>            }<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>            if (!tableFound) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>            }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>            return tableFound;<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>          }<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>        });<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>      }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>    }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>    // check from the master state if we are using a mini cluster<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>      // returning -- sometimes this can lag.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>        @Override<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>        public String explainFailure() throws IOException {<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>          return explainTableAvailability(tableName);<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>        }<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span><a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>        @Override<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>        public boolean evaluate() throws IOException {<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>        }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>      });<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>    }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  }<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span><a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>  /**<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>   * Do a small get/scan against one store. This is required because store<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>   */<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>                                                Get get) throws IOException {<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>    Scan scan = new Scan(get);<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>        // readpoint 0.<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>        0);<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span><a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>    scanner.next(result);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    if (!result.isEmpty()) {<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>      // verify that we are on the row we want:<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>      Cell kv = result.get(0);<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>        result.clear();<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>      }<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    }<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>    scanner.close();<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    return result;<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  }<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span><a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  /**<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>   * Create region split keys between startkey and endKey<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>   *<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>   * @param startKey<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>   * @param endKey<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>   * @return resulting split keys<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    assertTrue(numRegions&gt;3);<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>    return result;<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>  }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>  /**<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>   * Do a small get/scan against one store. This is required because store<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>   */<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>                                                byte [] row,<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>                                                ) throws IOException {<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    Get get = new Get(row);<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span><a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>    return getFromStoreFile(store,get);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>  }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span><a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>    final int eLen = expected.size();<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>    final int aLen = actual.size();<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span><a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>    int i;<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>    for (i = 0; i &lt; minLen<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>        ++i) {}<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span><a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>    if (additionalMsg == null) {<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>      additionalMsg = "";<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>    }<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>    if (!additionalMsg.isEmpty()) {<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>      additionalMsg = ". " + additionalMsg;<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>    }<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span><a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    if (eLen != aLen || i != minLen) {<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>      throw new AssertionError(<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    }<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>      return lst.get(i).toString();<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>    } else {<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return "&lt;out_of_range&gt;";<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span><a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>  public String getClusterKey() {<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span><a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>  /** Creates a random table with the given parameters */<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  public Table createRandomTable(TableName tableName,<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      final Collection&lt;String&gt; families,<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>      final int maxVersions,<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      final int numColsPerRow,<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span>      final int numFlushes,<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>      final int numRegions,<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>      final int numRowsPerFlush)<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>      throws IOException, InterruptedException {<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span><a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>        "\n");<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span><a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>    final int numCF = families.size();<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>    {<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>      int cfIndex = 0;<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      for (String cf : families) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>      }<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    }<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span><a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    final int actualStartKey = 0;<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>    final String keyFormat = "%08x";<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>        maxVersions,<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        numRegions);<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span><a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>    if (hbaseCluster != null) {<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    }<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span><a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span><a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span><a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>        Put put = new Put(row);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>        Delete del = new Delete(row);<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>          final long ts = rand.nextInt();<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>          if (rand.nextBoolean()) {<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>                ts + "_random_" + rand.nextLong());<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>            put.addColumn(cf, qual, ts, value);<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>            del.addColumn(cf, qual, ts);<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>          } else {<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>            del.addColumns(cf, qual, ts);<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>          }<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>        }<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span><a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>        if (!put.isEmpty()) {<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>          mutator.mutate(put);<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>        }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>        if (!del.isEmpty()) {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>          mutator.mutate(del);<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>        }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>      mutator.flush();<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>      if (hbaseCluster != null) {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>    }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>    mutator.close();<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span><a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>    return table;<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span><a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>  public static int randomFreePort() {<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  public static String randomMultiCastAddress() {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    return "226.1.1." + random.nextInt(254);<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>  }<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span><a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>  public static void waitForHostPort(String host, int port)<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      throws IOException {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>    final int maxTimeMs = 10000;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>    IOException savedException = null;<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      try {<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>        sock.close();<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        savedException = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>        break;<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>      } catch (UnknownHostException e) {<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span>      } catch (IOException e) {<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>        savedException = e;<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>      }<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>    }<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span><a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>    if (savedException != null) {<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>      throw savedException;<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>    }<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>  }<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span><a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>  /**<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   * logs a warning and continues.<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * @return the number of regions the table was split into<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   */<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      Durability.USE_DEFAULT);<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>  }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>  /**<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>   * logs a warning and continues.<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>   * @return the number of regions the table was split into<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>   */<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>    builder.setDurability(durability);<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    builder.setRegionReplication(regionReplication);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>    cfBuilder.setCompressionType(compression);<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>      numRegionsPerServer);<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>  }<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span><a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>  /**<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>   * logs a warning and continues.<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>   * @return the number of regions the table was split into<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>   */<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>    builder.setDurability(durability);<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>    builder.setRegionReplication(regionReplication);<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>      cfBuilder.setCompressionType(compression);<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>      hcds[i] = cfBuilder.build();<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>    }<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>  }<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span><a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>  /**<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>   * logs a warning and continues.<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>   * @return the number of regions the table was split into<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>   */<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>  }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  /**<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>   * logs a warning and continues.<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>   * @return the number of regions the table was split into<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>   */<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span>        numRegionsPerServer);<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>  }<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span><a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>  /**<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span>   * logs a warning and continues.<a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>   * @return the number of regions the table was split into<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>   */<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span>      int numRegionsPerServer) throws IOException {<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>  }<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span><a name="line.3910"></a>
-<span class="sourceLineNo">3911</span>  /**<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>   * logs a warning and continues.<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>   * @return the number of regions the table was split into<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>   */<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>        builder.setColumnFamily(cd);<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>      }<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>    }<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>    td = builder.build();<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span>    int totalNumberOfRegions = 0;<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span><a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    try {<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span>      // create a table a pre-splits regions.<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>      // The number of splits is set as:<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>      //    region servers * regions per region server).<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>      if (numberOfServers == 0) {<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span>        throw new IllegalStateException("No live regionservers");<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>      }<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span><a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span><a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>      byte[][] splits = splitter.split(<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>          totalNumberOfRegions);<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span><a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>      admin.createTable(td, splits);<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>    } catch (MasterNotRunningException e) {<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>      LOG.error("Master not running", e);<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>      throw new IOException(e);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>    } catch (TableExistsException e) {<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>          " already exists, continuing");<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>    } finally {<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>      admin.close();<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span>      unmanagedConnection.close();<a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>    }<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>    return totalNumberOfRegions;<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>  }<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span><a name="line.3960"></a>
-<span class="sourceLineNo">3961</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span>    }<a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>  }<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span><a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>  /**<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>   *  Due to async racing issue, a region may not be in<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>   *  the online region list of a region server yet, after<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span>   *  the assignment znode is deleted and the new assignment<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>   *  is recorded in master.<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>   */<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>  public void assertRegionOnServer(<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span>      final RegionInfo hri, final ServerName server,<a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>    while (true) {<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>      if (now &gt; timeoutTime) break;<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span>      Thread.sleep(10);<a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>    }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>      + " on server " + server);<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>  }<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span><a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>  /**<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>   * Check to make sure the region is open on the specified<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span>   * region server, but not on any other one.<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>   */<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>  public void assertRegionOnlyOnServer(<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span>      final RegionInfo hri, final ServerName server,<a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>    while (true) {<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3998"></a>
-<span class="sourceLineNo">3999</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span>          if (server.equals(rs.getServerName())) {<a name="line.4003"></a>
-<span class="sourceLineNo">4004</span>            continue;<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>          }<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>          for (HRegion r: hrs) {<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span>            assertTrue("Region should not be double assigned",<a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>          }<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>        }<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>        return; // good, we are happy<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span>      }<a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>      if (now &gt; timeoutTime) break;<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>      Thread.sleep(10);<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>    }<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>      + " on server " + server);<a name="line.4019"></a>
-<span class="sourceLineNo">4020</span>  }<a name="line.4020"></a>
-<span class="sourceLineNo">4021</span><a name="line.4021"></a>
-<span class="sourceLineNo">4022</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4022"></a>
-<span class="sourceLineNo">4023</span>    TableDescriptor td =<a name="line.4023"></a>
-<span class="sourceLineNo">4024</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4024"></a>
-<span class="sourceLineNo">4025</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4025"></a>
-<span class="sourceLineNo">4026</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4026"></a>
-<span class="sourceLineNo">4027</span>  }<a name="line.4027"></a>
-<span class="sourceLineNo">4028</span><a name="line.4028"></a>
-<span class="sourceLineNo">4029</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4029"></a>
-<span class="sourceLineNo">4030</span>      BlockCache blockCache) throws IOException {<a name="line.4030"></a>
-<span class="sourceLineNo">4031</span>    TableDescriptor td =<a name="line.4031"></a>
-<span class="sourceLineNo">4032</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4032"></a>
-<span class="sourceLineNo">4033</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4033"></a>
-<span class="sourceLineNo">4034</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4034"></a>
-<span class="sourceLineNo">4035</span>  }<a name="line.4035"></a>
-<span class="sourceLineNo">4036</span><a name="line.4036"></a>
-<span class="sourceLineNo">4037</span>  public void setFileSystemURI(String fsURI) {<a name="line.4037"></a>
-<span class="sourceLineNo">4038</span>    FS_URI = fsURI;<a name="line.4038"></a>
-<span class="sourceLineNo">4039</span>  }<a name="line.4039"></a>
-<span class="sourceLineNo">4040</span><a name="line.4040"></a>
-<span class="sourceLineNo">4041</span>  /**<a name="line.4041"></a>
-<span class="sourceLineNo">4042</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4042"></a>
-<span class="sourceLineNo">4043</span>   */<a name="line.4043"></a>
-<span class="sourceLineNo">4044</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4044"></a>
-<span class="sourceLineNo">4045</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4045"></a>
-<span class="sourceLineNo">4046</span>      @Override<a name="line.4046"></a>
-<span class="sourceLineNo">4047</span>      public String explainFailure() throws IOException {<a name="line.4047"></a>
-<span class="sourceLineNo">4048</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4048"></a>
-<span class="sourceLineNo">4049</span>            .getAssignmentManager().getRegionStates();<a name="line.4049"></a>
-<span class="sourceLineNo">4050</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4050"></a>
-<span class="sourceLineNo">4051</span>      }<a name="line.4051"></a>
-<span class="sourceLineNo">4052</span><a name="line.4052"></a>
-<span class="sourceLineNo">4053</span>      @Override<a name="line.4053"></a>
-<span class="sourceLineNo">4054</span>      public boolean evaluate() throws IOException {<a name="line.4054"></a>
-<span class="sourceLineNo">4055</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4055"></a>
-<span class="sourceLineNo">4056</span>        if (master == null) return false;<a name="line.4056"></a>
-<span class="sourceLineNo">4057</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4057"></a>
-<span class="sourceLineNo">4058</span>        if (am == null) return false;<a name="line.4058"></a>
-<span class="sourceLineNo">4059</span>        return !am.hasRegionsInTransition();<a name="line.4059"></a>
-<span class="sourceLineNo">4060</span>      }<a name="line.4060"></a>
-<span class="sourceLineNo">4061</span>    };<a name="line.4061"></a>
-<span class="sourceLineNo">4062</span>  }<a name="line.4062"></a>
-<span class="sourceLineNo">4063</span><a name="line.4063"></a>
-<span class="sourceLineNo">4064</span>  /**<a name="line.4064"></a>
-<span class="sourceLineNo">4065</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4065"></a>
-<span class="sourceLineNo">4066</span>   */<a name="line.4066"></a>
-<span class="sourceLineNo">4067</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4067"></a>
-<span class="sourceLineNo">4068</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4068"></a>
-<span class="sourceLineNo">4069</span>      @Override<a name="line.4069"></a>
-<span class="sourceLineNo">4070</span>      public String explainFailure() throws IOException {<a name="line.4070"></a>
-<span class="sourceLineNo">4071</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4071"></a>
-<span class="sourceLineNo">4072</span>      }<a name="line.4072"></a>
-<span class="sourceLineNo">4073</span><a name="line.4073"></a>
-<span class="sourceLineNo">4074</span>      @Override<a name="line.4074"></a>
-<span class="sourceLineNo">4075</span>      public boolean evaluate() throws IOException {<a name="line.4075"></a>
-<span class="sourceLineNo">4076</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4076"></a>
-<span class="sourceLineNo">4077</span>      }<a name="line.4077"></a>
-<span class="sourceLineNo">4078</span>    };<a name="line.4078"></a>
-<span class="sourceLineNo">4079</span>  }<a name="line.4079"></a>
-<span class="sourceLineNo">4080</span><a name="line.4080"></a>
-<span class="sourceLineNo">4081</span>  /**<a name="line.4081"></a>
-<span class="sourceLineNo">4082</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4082"></a>
-<span class="sourceLineNo">4083</span>   */<a name="line.4083"></a>
-<span class="sourceLineNo">4084</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4084"></a>
-<span class="sourceLineNo">4085</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4085"></a>
-<span class="sourceLineNo">4086</span>      @Override<a name="line.4086"></a>
-<span class="sourceLineNo">4087</span>      public String explainFailure() throws IOException {<a name="line.4087"></a>
-<span class="sourceLineNo">4088</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4088"></a>
-<span class="sourceLineNo">4089</span>      }<a name="line.4089"></a>
-<span class="sourceLineNo">4090</span><a name="line.4090"></a>
-<span class="sourceLineNo">4091</span>      @Override<a name="line.4091"></a>
-<span class="sourceLineNo">4092</span>      public boolean evaluate() throws IOException {<a name="line.4092"></a>
-<span class="sourceLineNo">4093</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4093"></a>
-<span class="sourceLineNo">4094</span>      }<a name="line.4094"></a>
-<span class="sourceLineNo">4095</span>    };<a name="line.4095"></a>
-<span class="sourceLineNo">4096</span>  }<a name="line.4096"></a>
-<span class="sourceLineNo">4097</span><a name="line.4097"></a>
-<span class="sourceLineNo">4098</span>  /**<a name="line.4098"></a>
-<span class="sourceLineNo">4099</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4099"></a>
-<span class="sourceLineNo">4100</span>   */<a name="line.4100"></a>
-<span class="sourceLineNo">4101</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4101"></a>
-<span class="sourceLineNo">4102</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4102"></a>
-<span class="sourceLineNo">4103</span>      @Override<a name="line.4103"></a>
-<span class="sourceLineNo">4104</span>      public String explainFailure() throws IOException {<a name="line.4104"></a>
-<span class="sourceLineNo">4105</span>        return explainTableAvailability(tableName);<a name="line.4105"></a>
-<span class="sourceLineNo">4106</span>      }<a name="line.4106"></a>
-<span class="sourceLineNo">4107</span><a name="line.4107"></a>
-<span class="sourceLineNo">4108</span>      @Override<a name="line.4108"></a>
-<span class="sourceLineNo">4109</span>      public boolean evaluate() throws IOException {<a name="line.4109"></a>
-<span class="sourceLineNo">4110</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4110"></a>
-<span class="sourceLineNo">4111</span>        if (tableAvailable) {<a name="line.4111"></a>
-<span class="sourceLineNo">4112</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4112"></a>
-<span class="sourceLineNo">4113</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4113"></a>
-<span class="sourceLineNo">4114</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4114"></a>
-<span class="sourceLineNo">4115</span>                .getAllRegionLocations()) {<a name="line.4115"></a>
-<span class="sourceLineNo">4116</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4116"></a>
-<span class="sourceLineNo">4117</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4117"></a>
-<span class="sourceLineNo">4118</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4118"></a>
-<span class="sourceLineNo">4119</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4119"></a>
-<span class="sourceLineNo">4120</span>                scan.addFamily(family);<a name="line.4120"></a>
-<span class="sourceLineNo">4121</span>              }<a name="line.4121"></a>
-<span class="sourceLineNo">4122</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4122"></a>
-<span class="sourceLineNo">4123</span>                scanner.next();<a name="line.4123"></a>
-<span class="sourceLineNo">4124</span>              }<a name="line.4124"></a>
-<span class="sourceLineNo">4125</span>            }<a name="line.4125"></a>
-<span class="sourceLineNo">4126</span>          }<a name="line.4126"></a>
-<span class="sourceLineNo">4127</span>        }<a name="line.4127"></a>
-<span class="sourceLineNo">4128</span>        return tableAvailable;<a name="line.4128"></a>
-<span class="sourceLineNo">4129</span>      }<a name="line.4129"></a>
-<span class="sourceLineNo">4130</span>    };<a name="line.4130"></a>
-<span class="sourceLineNo">4131</span>  }<a name="line.4131"></a>
-<span class="sourceLineNo">4132</span><a name="line.4132"></a>
-<span class="sourceLineNo">4133</span>  /**<a name="line.4133"></a>
-<span class="sourceLineNo">4134</span>   * Wait until no regions in transition.<a name="line.4134"></a>
-<span class="sourceLineNo">4135</span>   * @param timeout How long to wait.<a name="line.4135"></a>
-<span class="sourceLineNo">4136</span>   * @throws IOException<a name="line.4136"></a>
-<span class="sourceLineNo">4137</span>   */<a name="line.4137"></a>
-<span class="sourceLineNo">4138</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4138"></a>
-<span class="sourceLineNo">4139</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4139"></a>
-<span class="sourceLineNo">4140</span>  }<a name="line.4140"></a>
-<span class="sourceLineNo">4141</span><a name="line.4141"></a>
-<span class="sourceLineNo">4142</span>  /**<a name="line.4142"></a>
-<span class="sourceLineNo">4143</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4143"></a>
-<span class="sourceLineNo">4144</span>   * @throws IOException<a name="line.4144"></a>
-<span class="sourceLineNo">4145</span>   */<a name="line.4145"></a>
-<span class="sourceLineNo">4146</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4146"></a>
-<span class="sourceLineNo">4147</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4147"></a>
-<span class="sourceLineNo">4148</span>  }<a name="line.4148"></a>
-<span class="sourceLineNo">4149</span><a name="line.4149"></a>
-<span class="sourceLineNo">4150</span>  /**<a name="line.4150"></a>
-<span class="sourceLineNo">4151</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4151"></a>
-<span class="sourceLineNo">4152</span>   * @param timeoutMillis<a name="line.4152"></a>
-<span class="sourceLineNo">4153</span>   * @param labels<a name="line.4153"></a>
-<span class="sourceLineNo">4154</span>   */<a name="line.4154"></a>
-<span class="sourceLineNo">4155</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4155"></a>
-<span class="sourceLineNo">4156</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4156"></a>
-<span class="sourceLineNo">4157</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4157"></a>
-<span class="sourceLineNo">4158</span><a name="line.4158"></a>
-<span class="sourceLineNo">4159</span>      @Override<a name="line.4159"></a>
-<span class="sourceLineNo">4160</span>      public boolean evaluate() {<a name="line.4160"></a>
-<span class="sourceLineNo">4161</span>        for (String label : labels) {<a name="line.4161"></a>
-<span class="sourceLineNo">4162</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4162"></a>
-<span class="sourceLineNo">4163</span>            return false;<a name="line.4163"></a>
-<span class="sourceLineNo">4164</span>          }<a name="line.4164"></a>
-<span class="sourceLineNo">4165</span>        }<a name="line.4165"></a>
-<span class="sourceLineNo">4166</span>        return true;<a name="line.4166"></a>
-<span class="sourceLineNo">4167</span>      }<a name="line.4167"></a>
-<span class="sourceLineNo">4168</span><a name="line.4168"></a>
-<span class="sourceLineNo">4169</span>      @Override<a name="line.4169"></a>
-<span class="sourceLineNo">4170</span>      public String explainFailure() {<a name="line.4170"></a>
-<span class="sourceLineNo">4171</span>        for (String label : labels) {<a name="line.4171"></a>
-<span class="sourceLineNo">4172</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4172"></a>
-<span class="sourceLineNo">4173</span>            return label + " is not available yet";<a name="line.4173"></a>
-<span class="sourceLineNo">4174</span>          }<a name="line.4174"></a>
-<span class="sourceLineNo">4175</span>        }<a name="line.4175"></a>
-<span class="sourceLineNo">4176</span>        return "";<a name="line.4176"></a>
-<span class="sourceLineNo">4177</span>      }<a name="line.4177"></a>
-<span class="sourceLineNo">4178</span>    });<a name="line.4178"></a>
-<span class="sourceLineNo">4179</span>  }<a name="line.4179"></a>
-<span class="sourceLineNo">4180</span><a name="line.4180"></a>
-<span class="sourceLineNo">4181</span>  /**<a name="line.4181"></a>
-<span class="sourceLineNo">4182</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4182"></a>
-<span class="sourceLineNo">4183</span>   * encoding, bloom codecs available.<a name="line.4183"></a>
-<span class="sourceLineNo">4184</span>   * @return the list of column descriptors<a name="line.4184"></a>
-<span class="sourceLineNo">4185</span>   */<a name="line.4185"></a>
-<span class="sourceLineNo">4186</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4186"></a>
-<span class="sourceLineNo">4187</span>    return generateColumnDescriptors("");<a name="line.4187"></a>
-<span class="sourceLineNo">4188</span>  }<a name="line.4188"></a>
-<span class="sourceLineNo">4189</span><a name="line.4189"></a>
-<span class="sourceLineNo">4190</span>  /**<a name="line.4190"></a>
-<span class="sourceLineNo">4191</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4191"></a>
-<span class="sourceLineNo">4192</span>   * encoding, bloom codecs available.<a name="line.4192"></a>
-<span class="sourceLineNo">4193</span>   * @param prefix family names prefix<a name="line.4193"></a>
-<span class="sourceLineNo">4194</span>   * @return the list of column descriptors<a name="line.4194"></a>
-<span class="sourceLineNo">4195</span>   */<a name="line.4195"></a>
-<span class="sourceLineNo">4196</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4196"></a>
-<span class="sourceLineNo">4197</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4197"></a>
-<span class="sourceLineNo">4198</span>    long familyId = 0;<a name="line.4198"></a>
-<span class="sourceLineNo">4199</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4199"></a>
-<span class="sourceLineNo">4200</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4200"></a>
-<span class="sourceLineNo">4201</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4201"></a>
-<span class="sourceLineNo">4202</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4202"></a>
-<span class="sourceLineNo">4203</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4203"></a>
-<span class="sourceLineNo">4204</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4204"></a>
-<span class="sourceLineNo">4205</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4205"></a>
-<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4206"></a>
-<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4207"></a>
-<span class="sourceLineNo">4208</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4208"></a>
-<span class="sourceLineNo">4209</span>          familyId++;<a name="line.4209"></a>
-<span class="sourceLineNo">4210</span>        }<a name="line.4210"></a>
-<span class="sourceLineNo">4211</span>      }<a name="line.4211"></a>
-<span class="sourceLineNo">4212</span>    }<a name="line.4212"></a>
-<span class="sourceLineNo">4213</span>    return columnFamilyDescriptors;<a name="line.4213"></a>
-<span class="sourceLineNo">4214</span>  }<a name="line.4214"></a>
-<span class="sourceLineNo">4215</span><a name="line.4215"></a>
-<span class="sourceLineNo">4216</span>  /**<a name="line.4216"></a>
-<span class="sourceLineNo">4217</span>   * Get supported compression algorithms.<a name="line.4217"></a>
-<span class="sourceLineNo">4218</span>   * @return supported compression algorithms.<a name="line.4218"></a>
-<span class="sourceLineNo">4219</span>   */<a name="line.4219"></a>
-<span class="sourceLineNo">4220</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4220"></a>
-<span class="sourceLineNo">4221</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4221"></a>
-<span class="sourceLineNo">4222</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4222"></a>
-<span class="sourceLineNo">4223</span>    for (String algoName : allAlgos) {<a name="line.4223"></a>
-<span class="sourceLineNo">4224</span>      try {<a name="line.4224"></a>
-<span class="sourceLineNo">4225</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4225"></a>
-<span class="sourceLineNo">4226</span>        algo.getCompressor();<a name="line.4226"></a>
-<span class="sourceLineNo">4227</span>        supportedAlgos.add(algo);<a name="line.4227"></a>
-<span class="sourceLineNo">4228</span>      } catch (Throwable t) {<a name="line.4228"></a>
-<span class="sourceLineNo">4229</span>        // this algo is not available<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>      }<a name="line.4230"></a>
-<span class="sourceLineNo">4231</span>    }<a name="line.4231"></a>
-<span class="sourceLineNo">4232</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4232"></a>
-<span class="sourceLineNo">4233</span>  }<a name="line.4233"></a>
-<span class="sourceLineNo">4234</span><a name="line.4234"></a>
-<span class="sourceLineNo">4235</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4235"></a>
-<span class="sourceLineNo">4236</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4236"></a>
-<span class="sourceLineNo">4237</span>    scan.setSmall(true);<a name="line.4237"></a>
-<span class="sourceLineNo">4238</span>    scan.setCaching(1);<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>    scan.setReversed(true);<a name="line.4239"></a>
-<span class="sourceLineNo">4240</span>    scan.addFamily(family);<a name="line.4240"></a>
-<span class="sourceLineNo">4241</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4241"></a>
-<span class="sourceLineNo">4242</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4242"></a>
-<span class="sourceLineNo">4243</span>      scanner.next(cells);<a name="line.4243"></a>
-<span class="sourceLineNo">4244</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4244"></a>
-<span class="sourceLineNo">4245</span>        return null;<a name="line.4245"></a>
-<span class="sourceLineNo">4246</span>      }<a name="line.4246"></a>
-<span class="sourceLineNo">4247</span>      return Result.create(cells);<a name="line.4247"></a>
-<span class="sourceLineNo">4248</span>    }<a name="line.4248"></a>
-<span class="sourceLineNo">4249</span>  }<a name="line.4249"></a>
-<span class="sourceLineNo">4250</span><a name="line.4250"></a>
-<span class="sourceLineNo">4251</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4251"></a>
-<span class="sourceLineNo">4252</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4252"></a>
-<span class="sourceLineNo">4253</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4253"></a>
-<span class="sourceLineNo">4254</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4254"></a>
-<span class="sourceLineNo">4255</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4255"></a>
-<span class="sourceLineNo">4256</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4256"></a>
-<span class="sourceLineNo">4257</span>  }<a name="line.4257"></a>
-<span class="sourceLineNo">4258</span><a name="line.4258"></a>
-<span class="sourceLineNo">4259</span>  /**<a name="line.4259"></a>
-<span class="sourceLineNo">4260</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4260"></a>
-<span class="sourceLineNo">4261</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4261"></a>
-<span class="sourceLineNo">4262</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4262"></a>
-<span class="sourceLineNo">4263</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4263"></a>
-<span class="sourceLineNo">4264</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4264"></a>
-<span class="sourceLineNo">4265</span>   * less baggage. It came in in HBASE-5291.<a name="line.4265"></a>
-<span class="sourceLineNo">4266</span>   */<a name="line.4266"></a>
-<span class="sourceLineNo">4267</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4267"></a>
-<span class="sourceLineNo">4268</span>    Properties conf = MiniKdc.createConf();<a name="line.4268"></a>
-<span class="sourceLineNo">4269</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4269"></a>
-<span class="sourceLineNo">4270</span>    MiniKdc kdc = null;<a name="line.4270"></a>
-<span class="sourceLineNo">4271</span>    File dir = null;<a name="line.4271"></a>
-<span class="sourceLineNo">4272</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4272"></a>
-<span class="sourceLineNo">4273</span>    // another service captures the port in between which'll result in BindException.<a name="line.4273"></a>
-<span class="sourceLineNo">4274</span>    boolean bindException;<a name="line.4274"></a>
-<span class="sourceLineNo">4275</span>    int numTries = 0;<a name="line.4275"></a>
-<span class="sourceLineNo">4276</span>    do {<a name="line.4276"></a>
-<span class="sourceLineNo">4277</span>      try {<a name="line.4277"></a>
-<span class="sourceLineNo">4278</span>        bindException = false;<a name="line.4278"></a>
-<span class="sourceLineNo">4279</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4279"></a>
-<span class="sourceLineNo">4280</span>        kdc = new MiniKdc(conf, dir);<a name="line.4280"></a>
-<span class="sourceLineNo">4281</span>        kdc.start();<a name="line.4281"></a>
-<span class="sourceLineNo">4282</span>      } catch (BindException e) {<a name="line.4282"></a>
-<span class="sourceLineNo">4283</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4283"></a>
-<span class="sourceLineNo">4284</span>        numTries++;<a name="line.4284"></a>
-<span class="sourceLineNo">4285</span>        if (numTries == 3) {<a name="line.4285"></a>
-<span class="sourceLineNo">4286</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4286"></a>
-<span class="sourceLineNo">4287</span>          throw e;<a name="line.4287"></a>
-<span class="sourceLineNo">4288</span>        }<a name="line.4288"></a>
-<span class="sourceLineNo">4289</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4289"></a>
-<span class="sourceLineNo">4290</span>        bindException = true;<a name="line.4290"></a>
-<span class="sourceLineNo">4291</span>      }<a name="line.4291"></a>
-<span class="sourceLineNo">4292</span>    } while (bindException);<a name="line.4292"></a>
-<span class="sourceLineNo">4293</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>    return kdc;<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>  }<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span><a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>    int numHFiles = 0;<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4299"></a>
-<span class="sourceLineNo">4300</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4300"></a>
-<span class="sourceLineNo">4301</span>                                    family);<a name="line.4301"></a>
-<span class="sourceLineNo">4302</span>    }<a name="line.4302"></a>
-<span class="sourceLineNo">4303</span>    return numHFiles;<a name="line.4303"></a>
-<span class="sourceLineNo">4304</span>  }<a name="line.4304"></a>
-<span class="sourceLineNo">4305</span><a name="line.4305"></a>
-<span class="sourceLineNo">4306</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4306"></a>
-<span class="sourceLineNo">4307</span>                               final byte[] family) {<a name="line.4307"></a>
-<span class="sourceLineNo">4308</span>    int numHFiles = 0;<a name="line.4308"></a>
-<span class="sourceLineNo">4309</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4309"></a>
-<span class="sourceLineNo">4310</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4310"></a>
-<span class="sourceLineNo">4311</span>    }<a name="line.4311"></a>
-<span class="sourceLineNo">4312</span>    return numHFiles;<a name="line.4312"></a>
-<span class="sourceLineNo">4313</span>  }<a name="line.4313"></a>
-<span class="sourceLineNo">4314</span><a name="line.4314"></a>
-<span class="sourceLineNo">4315</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4315"></a>
-<span class="sourceLineNo">4316</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4316"></a>
-<span class="sourceLineNo">4317</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4317"></a>
-<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4318"></a>
-<span class="sourceLineNo">4319</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4319"></a>
-<span class="sourceLineNo">4320</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4320"></a>
-<span class="sourceLineNo">4321</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4321"></a>
-<span class="sourceLineNo">4322</span>      assertEquals(0,<a name="line.4322"></a>
-<span class="sourceLineNo">4323</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4323"></a>
-<span class="sourceLineNo">4324</span>    }<a name="line.4324"></a>
-<span class="sourceLineNo">4325</span>  }<a name="line.4325"></a>
-<span class="sourceLineNo">4326</span><a name="line.4326"></a>
-<span class="sourceLineNo">4327</span>  /**<a name="line.4327"></a>
-<span class="sourceLineNo">4328</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4328"></a>
-<span class="sourceLineNo">4329</span>   * invocations.<a name="line.4329"></a>
-<span class="sourceLineNo">4330</span>   */<a name="line.4330"></a>
-<span class="sourceLineNo">4331</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4331"></a>
-<span class="sourceLineNo">4332</span>    throws InterruptedException {<a name="line.4332"></a>
-<span class="sourceLineNo">4333</span>    try {<a name="line.4333"></a>
-<span class="sourceLineNo">4334</span>      while (!condition.getAsBoolean()) {<a name="line.4334"></a>
-<span class="sourceLineNo">4335</span>        Thread.sleep(sleepMillis);<a name="line.4335"></a>
-<span class="sourceLineNo">4336</span>      }<a name="line.4336"></a>
-<span class="sourceLineNo">4337</span>    } catch (RuntimeException e) {<a name="line.4337"></a>
-<span class="sourceLineNo">4338</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4338"></a>
-<span class="sourceLineNo">4339</span>        throw (AssertionError) e.getCause();<a name="line.4339"></a>
-<span class="sourceLineNo">4340</span>      }<a name="line.4340"></a>
-<span class="sourceLineNo">4341</span>      throw e;<a name="line.4341"></a>
-<span class="sourceLineNo">4342</span>    }<a name="line.4342"></a>
-<span class="sourceLineNo">4343</span>  }<a name="line.4343"></a>
-<span class="sourceLineNo">4344</span>}<a name="line.4344"></a>
+<span class="sourceLineNo">3372</span><a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>  /**<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param c Initial configuration<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   * @return A new configuration instance with a different user set into it.<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>   * @throws IOException<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>   */<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>  public static User getDifferentUser(final Configuration c,<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    final String differentiatingSuffix)<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  throws IOException {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      return User.getCurrent();<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    }<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>    String username = User.getCurrent().getName() +<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>      differentiatingSuffix;<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    User user = User.createUserForTesting(c, username,<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>        new String[]{"supergroup"});<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>    return user;<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>  }<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span><a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      throws IOException {<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      try {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        for (RegionInfo region :<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>          online.add(region.getRegionNameAsString());<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>        }<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>      } catch (RegionServerStoppedException e) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>        // That's fine.<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>      }<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>      try {<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>        for (RegionInfo region :<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>          online.add(region.getRegionNameAsString());<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>        }<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>      } catch (RegionServerStoppedException e) {<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>        // That's fine.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>      } catch (ServerNotRunningYetException e) {<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>        // That's fine.<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>      }<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    }<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>    return online;<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>  }<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span><a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>  /**<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>   * &lt;pre&gt;<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>   * &lt;/pre&gt;<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>   * @param max<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>   * @throws NoSuchFieldException<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>   * @throws SecurityException<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @throws IllegalAccessException<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @throws IllegalArgumentException<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>      final int max) {<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>    try {<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>        String className = clazz.getSimpleName();<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        if (className.equals("DFSOutputStream")) {<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>          if (clazz.isInstance(stream)) {<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>            Field maxRecoveryErrorCountField =<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>            break;<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>          }<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      }<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>    } catch (Exception e) {<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>      LOG.info("Could not set max recovery field", e);<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>    }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span><a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>   * has completed assignment.<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>   * @return true if the region is assigned false otherwise.<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>   */<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>      throws IOException, InterruptedException {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    am.assign(regionInfo);<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>  }<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span><a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>  /**<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>   *<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>   * @param destRegion region to move<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * @param destServer destination server of the region<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * @throws InterruptedException<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   * @throws IOException<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   */<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>      throws InterruptedException, IOException {<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    while (true) {<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>          .getRegionServerOfRegion(destRegion);<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>        break;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>      }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      Thread.sleep(10);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    }<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>  }<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span><a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>  /**<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>   * This means all regions have been deployed,<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>   * server.<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>   * @param tableName the table name<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>   * @throws IOException<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>   */<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span><a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>  /**<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * Waith until all system table's regions get assigned<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   * @throws IOException<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>   */<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>  }<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span><a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>  /**<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>   * server.<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>   * @param tableName the table name<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>   * @param timeout timeout, in milliseconds<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>   * @throws IOException<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>   */<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>      throws IOException {<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>            timeout + "ms");<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>          @Override<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>          public String explainFailure() throws IOException {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>            return explainTableAvailability(tableName);<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>          }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>          @Override<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>          public boolean evaluate() throws IOException {<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>            Scan scan = new Scan();<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>            boolean tableFound = false;<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>                  // (for fault tolerance testing).<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>                  tableFound = true;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>                  byte[] server =<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>                  if (server == null) {<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>                    return false;<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>                  } else {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>                    byte[] startCode =<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>                    ServerName serverName =<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>                            Bytes.toLong(startCode));<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>                      return false;<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>                    }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>                  }<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>                    return false;<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>                  }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>                }<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>              }<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>            }<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>            if (!tableFound) {<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>            }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>            return tableFound;<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>          }<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>        });<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      }<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>    }<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>    // check from the master state if we are using a mini cluster<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      // returning -- sometimes this can lag.<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>        @Override<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>        public String explainFailure() throws IOException {<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>          return explainTableAvailability(tableName);<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>        }<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span><a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>        @Override<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>        public boolean evaluate() throws IOException {<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>        }<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>      });<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>    }<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>  }<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span><a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>  /**<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>   * Do a small get/scan against one store. This is required because store<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   */<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>                                                Get get) throws IOException {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>    Scan scan = new Scan(get);<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>        // readpoint 0.<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>        0);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span><a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    scanner.next(result);<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    if (!result.isEmpty()) {<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>      // verify that we are on the row we want:<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>      Cell kv = result.get(0);<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>        result.clear();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>      }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    }<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>    scanner.close();<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    return result;<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>  }<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span><a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  /**<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>   * Create region split keys between startkey and endKey<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>   *<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>   * @param startKey<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>   * @param endKey<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   * @return resulting split keys<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>   */<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    assertTrue(numRegions&gt;3);<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>    return result;<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  }<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span><a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>  /**<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>   * Do a small get/scan against one store. This is required because store<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>   */<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>                                                byte [] row,<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>                                                ) throws IOException {<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    Get get = new Get(row);<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span><a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    return getFromStoreFile(store,get);<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>  }<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span><a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>    final int eLen = expected.size();<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>    final int aLen = actual.size();<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span><a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    int i;<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>    for (i = 0; i &lt; minLen<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        ++i) {}<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span><a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>    if (additionalMsg == null) {<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      additionalMsg = "";<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    if (!additionalMsg.isEmpty()) {<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>      additionalMsg = ". " + additionalMsg;<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>    }<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span><a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>    if (eLen != aLen || i != minLen) {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>      throw new AssertionError(<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    }<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>      return lst.get(i).toString();<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>    } else {<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>      return "&lt;out_of_range&gt;";<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>    }<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span><a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>  public String getClusterKey() {<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  }<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span><a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  /** Creates a random table with the given parameters */<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>  public Table createRandomTable(TableName tableName,<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      final Collection&lt;String&gt; families,<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      final int maxVersions,<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>      final int numColsPerRow,<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>      final int numFlushes,<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>      final int numRegions,<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>      final int numRowsPerFlush)<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>      throws IOException, InterruptedException {<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span><a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>        "\n");<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span><a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>    final int numCF = families.size();<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>    {<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>      int cfIndex = 0;<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>      for (String cf : families) {<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>      }<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span><a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>    final int actualStartKey = 0;<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>    final String keyFormat = "%08x";<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>        maxVersions,<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        numRegions);<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span><a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    if (hbaseCluster != null) {<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>    }<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span><a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span><a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span><a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>        Put put = new Put(row);<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>        Delete del = new Delete(row);<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>          final long ts = rand.nextInt();<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>          if (rand.nextBoolean()) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>                ts + "_random_" + rand.nextLong());<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>            put.addColumn(cf, qual, ts, value);<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>            del.addColumn(cf, qual, ts);<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          } else {<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>            del.addColumns(cf, qual, ts);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>          }<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>        }<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span><a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (!put.isEmpty()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          mutator.mutate(put);<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>        }<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span><a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        if (!del.isEmpty()) {<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>          mutator.mutate(del);<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>        }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      }<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      mutator.flush();<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      if (hbaseCluster != null) {<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      }<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>    }<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    mutator.close();<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span><a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>    return table;<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>  }<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span><a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>  public static int randomFreePort() {<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>  }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  public static String randomMultiCastAddress() {<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>    return "226.1.1." + random.nextInt(254);<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>  }<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span><a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  public static void waitForHostPort(String host, int port)<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>      throws IOException {<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>    final int maxTimeMs = 10000;<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>    IOException savedException = null;<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>      try {<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>        sock.close();<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>        savedException = null;<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>        break;<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>      } catch (UnknownHostException e) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      } catch (IOException e) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        savedException = e;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span><a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>    if (savedException != null) {<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>      throw savedException;<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>    }<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>  }<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span><a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>  /**<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>   * logs a warning and continues.<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>   * @return the number of regions the table was split into<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>   */<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      Durability.USE_DEFAULT);<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>  }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>  /**<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * logs a warning and continues.<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * @return the number of regions the table was split into<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   */<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>    builder.setDurability(durability);<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>    builder.setRegionReplication(regionReplication);<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    cfBuilder.setCompressionType(compression);<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>      numRegionsPerServer);<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>  }<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span><a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>  /**<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>   * logs a warning and continues.<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>   * @return the number of regions the table was split into<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>   */<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>    builder.setDurability(durability);<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>    builder.setRegionReplication(regionReplication);<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>      cfBuilder.setCompressionType(compression);<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span>      hcds[i] = cfBuilder.build();<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>    }<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   * logs a warning and continues.<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>   * @return the number of regions the table was split into<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span>   */<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3885"></a>
+<span class="sourceLineNo">3886</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span>  }<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span><a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>  /**<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>   * logs a warning and continues.<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>   * @return the number of regions the table was split into<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>   */<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>        numRegionsPerServer);<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  }<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span><a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  /**<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>   * logs a warning and continues.<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>   * @return the number of regions the table was split into<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>   */<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span>      int numRegionsPerServer) throws IOException {<a name="line.3907"></a>
+<span class="sourceLineNo">3908</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span>  }<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span><a name="line.3911"></a>
+<span class="sourceLineNo">3912</span>  /**<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>   * logs a warning and continues.<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>   * @return the number of regions the table was split into<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span>   */<a name="line.3916"></a>
+<span class="sourceLineNo">3917</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3920"></a>
+<span class="sourceLineNo">3921</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span>        builder.setColumnFamily(cd);<a name="line.3923"></a>
+<span class="sourceLineNo">3924</span>      }<a name="line.3924"></a>
+<span class="sourceLineNo">3925</span>    }<a name="line.3925"></a>
+<span class="sourceLineNo">3926</span>    td = builder.build();<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span>    int totalNumberOfRegions = 0;<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span><a name="line.3930"></a>
+<span class="sourceLineNo">3931</span>    try {<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span>      // create a table a pre-splits regions.<a name="line.3932"></a>
+<span class="sourceLineNo">3933</span>      // The number of splits is set as:<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span>      //    region servers * regions per region server).<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3935"></a>
+<span class="sourceLineNo">3936</span>      if (numberOfServers == 0) {<a name="line.3936"></a>
+<span class="sourceLineNo">3937</span>        throw new IllegalStateException("No live regionservers");<a name="line.3937"></a>
+<span class="sourceLineNo">3938</span>      }<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span><a name="line.3939"></a>
+<span class="sourceLineNo">3940</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span><a name="line.3944"></a>
+<span class="sourceLineNo">3945</span>      byte[][] splits = splitter.split(<a name="line.3945"></a>
+<span class="sourceLineNo">3946</span>          totalNumberOfRegions);<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span><a name="line.3947"></a>
+<span class="sourceLineNo">3948</span>      admin.createTable(td, splits);<a name="line.3948"></a>
+<span class="sourceLineNo">3949</span>    } catch (MasterNotRunningException e) {<a name="line.3949"></a>
+<span class="sourceLineNo">3950</span>      LOG.error("Master not running", e);<a name="line.3950"></a>
+<span class="sourceLineNo">3951</span>      throw new IOException(e);<a name="line.3951"></a>
+<span class="sourceLineNo">3952</span>    } catch (TableExistsException e) {<a name="line.3952"></a>
+<span class="sourceLineNo">3953</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3953"></a>
+<span class="sourceLineNo">3954</span>          " already exists, continuing");<a name="line.3954"></a>
+<span class="sourceLineNo">3955</span>    } finally {<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span>      admin.close();<a name="line.3956"></a>
+<span class="sourceLineNo">3957</span>      unmanagedConnection.close();<a name="line.3957"></a>
+<span class="sourceLineNo">3958</span>    }<a name="line.3958"></a>
+<span class="sourceLineNo">3959</span>    return totalNumberOfRegions;<a name="line.3959"></a>
+<span class="sourceLineNo">3960</span>  }<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span><a name="line.3961"></a>
+<span class="sourceLineNo">3962</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3962"></a>
+<span class="sourceLineNo">3963</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3964"></a>
+<span class="sourceLineNo">3965</span>    }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span>  }<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span><a name="line.3967"></a>
+<span class="sourceLineNo">3968</span>  /**<a name="line.3968"></a>
+<span class="sourceLineNo">3969</span>   *  Due to async racing issue, a region may not be in<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span>   *  the online region list of a region server yet, after<a name="line.3970"></a>
+<span class="sourceLineNo">3971</span>   *  the assignment znode is deleted and the new assignment<a name="line.3971"></a>
+<span class="sourceLineNo">3972</span>   *  is recorded in master.<a name="line.3972"></a>
+<span class="sourceLineNo">3973</span>   */<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span>  public void assertRegionOnServer(<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>      final RegionInfo hri, final ServerName server,<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3976"></a>
+<span class="sourceLineNo">3977</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3977"></a>
+<span class="sourceLineNo">3978</span>    while (true) {<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3981"></a>
+<span class="sourceLineNo">3982</span>      if (now &gt; timeoutTime) break;<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span>      Thread.sleep(10);<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span>    }<a name="line.3984"></a>
+<span class="sourceLineNo">3985</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span>      + " on server " + server);<a name="line.3986"></a>
+<span class="sourceLineNo">3987</span>  }<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span><a name="line.3988"></a>
+<span class="sourceLineNo">3989</span>  /**<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span>   * Check to make sure the region is open on the specified<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span>   * region server, but not on any other one.<a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>   */<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span>  public void assertRegionOnlyOnServer(<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span>      final RegionInfo hri, final ServerName server,<a name="line.3994"></a>
+<span class="sourceLineNo">3995</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3996"></a>
+<span class="sourceLineNo">3997</span>    while (true) {<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3998"></a>
+<span class="sourceLineNo">3999</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4001"></a>
+<span class="sourceLineNo">4002</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4002"></a>
+<span class="sourceLineNo">4003</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span>          if (server.equals(rs.getServerName())) {<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>            continue;<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span>          }<a name="line.4006"></a>
+<span class="sourceLineNo">4007</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4007"></a>
+<span class="sourceLineNo">4008</span>          for (HRegion r: hrs) {<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span>            assertTrue("Region should not be double assigned",<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span>          }<a name="line.4011"></a>
+<span class="sourceLineNo">4012</span>        }<a name="line.4012"></a>
+<span class="sourceLineNo">4013</span>        return; // good, we are happy<a name="line.4013"></a>
+<span class="sourceLineNo">4014</span>      }<a name="line.4014"></a>
+<span class="sourceLineNo">4015</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4015"></a>
+<span class="sourceLineNo">4016</span>      if (now &gt; timeoutTime) break;<a name="line.4016"></a>
+<span class="sourceLineNo">4017</span>      Thread.sleep(10);<a name="line.4017"></a>
+<span class="sourceLineNo">4018</span>    }<a name="line.4018"></a>
+<span class="sourceLineNo">4019</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4019"></a>
+<span class="sourceLineNo">4020</span>      + " on server " + server);<a name="line.4020"></a>
+<span class="sourceLineNo">4021</span>  }<a name="line.4021"></a>
+<span class="sourceLineNo">4022</span><a name="line.4022"></a>
+<span class="sourceLineNo">4023</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4023"></a>
+<span class="sourceLineNo">4024</span>    TableDescriptor td =<a name="line.4024"></a>
+<span class="sourceLineNo">4025</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4025"></a>
+<span class="sourceLineNo">4026</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4026"></a>
+<span class="sourceLineNo">4027</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4027"></a>
+<span class="sourceLineNo">4028</span>  }<a name="line.4028"></a>
+<span class="sourceLineNo">4029</span><a name="line.4029"></a>
+<span class="sourceLineNo">4030</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4030"></a>
+<span class="sourceLineNo">4031</span>      BlockCache blockCache) throws IOException {<a name="line.4031"></a>
+<span class="sourceLineNo">4032</span>    TableDescriptor td =<a name="line.4032"></a>
+<span class="sourceLineNo">4033</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4033"></a>
+<span class="sourceLineNo">4034</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4034"></a>
+<span class="sourceLineNo">4035</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4035"></a>
+<span class="sourceLineNo">4036</span>  }<a name="line.4036"></a>
+<span class="sourceLineNo">4037</span><a name="line.4037"></a>
+<span class="sourceLineNo">4038</span>  public void setFileSystemURI(String fsURI) {<a name="line.4038"></a>
+<span class="sourceLineNo">4039</span>    FS_URI = fsURI;<a name="line.4039"></a>
+<span class="sourceLineNo">4040</span>  }<a name="line.4040"></a>
+<span class="sourceLineNo">4041</span><a name="line.4041"></a>
+<span class="sourceLineNo">4042</span>  /**<a name="line.4042"></a>
+<span class="sourceLineNo">4043</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4043"></a>
+<span class="sourceLineNo">4044</span>   */<a name="line.4044"></a>
+<span class="sourceLineNo">4045</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4045"></a>
+<span class="sourceLineNo">4046</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4046"></a>
+<span class="sourceLineNo">4047</span>      @Override<a name="line.4047"></a>
+<span class="sourceLineNo">4048</span>      public String explainFailure() throws IOException {<a name="line.4048"></a>
+<span class="sourceLineNo">4049</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4049"></a>
+<span class="sourceLineNo">4050</span>            .getAssignmentManager().getRegionStates();<a name="line.4050"></a>
+<span class="sourceLineNo">4051</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4051"></a>
+<span class="sourceLineNo">4052</span>      }<a name="line.4052"></a>
+<span class="sourceLineNo">4053</span><a name="line.4053"></a>
+<span class="sourceLineNo">4054</span>      @Override<a name="line.4054"></a>
+<span class="sourceLineNo">4055</span>      public boolean evaluate() throws IOException {<a name="line.4055"></a>
+<span class="sourceLineNo">4056</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4056"></a>
+<span class="sourceLineNo">4057</span>        if (master == null) return false;<a name="line.4057"></a>
+<span class="sourceLineNo">4058</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4058"></a>
+<span class="sourceLineNo">4059</span>        if (am == null) return false;<a name="line.4059"></a>
+<span class="sourceLineNo">4060</span>        return !am.hasRegionsInTransition();<a name="line.4060"></a>
+<span class="sourceLineNo">4061</span>      }<a name="line.4061"></a>
+<span class="sourceLineNo">4062</span>    };<a name="line.4062"></a>
+<span class="sourceLineNo">4063</span>  }<a name="line.4063"></a>
+<span class="sourceLineNo">4064</span><a name="line.4064"></a>
+<span class="sourceLineNo">4065</span>  /**<a name="line.4065"></a>
+<span class="sourceLineNo">4066</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4066"></a>
+<span class="sourceLineNo">4067</span>   */<a name="line.4067"></a>
+<span class="sourceLineNo">4068</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4068"></a>
+<span class="sourceLineNo">4069</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4069"></a>
+<span class="sourceLineNo">4070</span>      @Override<a name="line.4070"></a>
+<span class="sourceLineNo">4071</span>      public String explainFailure() throws IOException {<a name="line.4071"></a>
+<span class="sourceLineNo">4072</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4072"></a>
+<span class="sourceLineNo">4073</span>      }<a name="line.4073"></a>
+<span class="sourceLineNo">4074</span><a name="line.4074"></a>
+<span class="sourceLineNo">4075</span>      @Override<a name="line.4075"></a>
+<span class="sourceLineNo">4076</span>      public boolean evaluate() throws IOException {<a name="line.4076"></a>
+<span class="sourceLineNo">4077</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4077"></a>
+<span class="sourceLineNo">4078</span>      }<a name="line.4078"></a>
+<span class="sourceLineNo">4079</span>    };<a name="line.4079"></a>
+<span class="sourceLineNo">4080</span>  }<a name="line.4080"></a>
+<span class="sourceLineNo">4081</span><a name="line.4081"></a>
+<span class="sourceLineNo">4082</span>  /**<a name="line.4082"></a>
+<span class="sourceLineNo">4083</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4083"></a>
+<span class="sourceLineNo">4084</span>   */<a name="line.4084"></a>
+<span class="sourceLineNo">4085</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4085"></a>
+<span class="sourceLineNo">4086</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4086"></a>
+<span class="sourceLineNo">4087</span>      @Override<a name="line.4087"></a>
+<span class="sourceLineNo">4088</span>      public String explainFailure() throws IOException {<a name="line.4088"></a>
+<span class="sourceLineNo">4089</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4089"></a>
+<span class="sourceLineNo">4090</span>      }<a name="line.4090"></a>
+<span class="sourceLineNo">4091</span><a name="line.4091"></a>
+<span class="sourceLineNo">4092</span>      @Override<a name="line.4092"></a>
+<span class="sourceLineNo">4093</span>      public boolean evaluate() throws IOException {<a name="line.4093"></a>
+<span class="sourceLineNo">4094</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4094"></a>
+<span class="sourceLineNo">4095</span>      }<a name="line.4095"></a>
+<span class="sourceLineNo">4096</span>    };<a name="line.4096"></a>
+<span class="sourceLineNo">4097</span>  }<a name="line.4097"></a>
+<span class="sourceLineNo">4098</span><a name="line.4098"></a>
+<span class="sourceLineNo">4099</span>  /**<a name="line.4099"></a>
+<span class="sourceLineNo">4100</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4100"></a>
+<span class="sourceLineNo">4101</span>   */<a name="line.4101"></a>
+<span class="sourceLineNo">4102</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4102"></a>
+<span class="sourceLineNo">4103</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4103"></a>
+<span class="sourceLineNo">4104</span>      @Override<a name="line.4104"></a>
+<span class="sourceLineNo">4105</span>      public String explainFailure() throws IOException {<a name="line.4105"></a>
+<span class="sourceLineNo">4106</span>        return explainTableAvailability(tableName);<a name="line.4106"></a>
+<span class="sourceLineNo">4107</span>      }<a name="line.4107"></a>
+<span class="sourceLineNo">4108</span><a name="line.4108"></a>
+<span class="sourceLineNo">4109</span>      @Override<a name="line.4109"></a>
+<span class="sourceLineNo">4110</span>      public boolean evaluate() throws IOException {<a name="line.4110"></a>
+<span class="sourceLineNo">4111</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4111"></a>
+<span class="sourceLineNo">4112</span>        if (tableAvailable) {<a name="line.4112"></a>
+<span class="sourceLineNo">4113</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4113"></a>
+<span class="sourceLineNo">4114</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4114"></a>
+<span class="sourceLineNo">4115</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4115"></a>
+<span class="sourceLineNo">4116</span>                .getAllRegionLocations()) {<a name="line.4116"></a>
+<span class="sourceLineNo">4117</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4117"></a>
+<span class="sourceLineNo">4118</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4118"></a>
+<span class="sourceLineNo">4119</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4119"></a>
+<span class="sourceLineNo">4120</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4120"></a>
+<span class="sourceLineNo">4121</span>                scan.addFamily(family);<a name="line.4121"></a>
+<span class="sourceLineNo">4122</span>              }<a name="line.4122"></a>
+<span class="sourceLineNo">4123</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4123"></a>
+<span class="sourceLineNo">4124</span>                scanner.next();<a name="line.4124"></a>
+<span class="sourceLineNo">4125</span>              }<a name="line.4125"></a>
+<span class="sourceLineNo">4126</span>            }<a name="line.4126"></a>
+<span class="sourceLineNo">4127</span>          }<a name="line.4127"></a>
+<span class="sourceLineNo">4128</span>        }<a name="line.4128"></a>
+<span class="sourceLineNo">4129</span>        return tableAvailable;<a name="line.4129"></a>
+<span class="sourceLineNo">4130</span>      }<a name="line.4130"></a>
+<span class="sourceLineNo">4131</span>    };<a name="line.4131"></a>
+<span class="sourceLineNo">4132</span>  }<a name="line.4132"></a>
+<span class="sourceLineNo">4133</span><a name="line.4133"></a>
+<span class="sourceLineNo">4134</span>  /**<a name="line.4134"></a>
+<span class="sourceLineNo">4135</span>   * Wait until no regions in transition.<a name="line.4135"></a>
+<span class="sourceLineNo">4136</span>   * @param timeout How long to wait.<a name="line.4136"></a>
+<span class="sourceLineNo">4137</span>   * @throws IOException<a name="line.4137"></a>
+<span class="sourceLineNo">4138</span>   */<a name="line.4138"></a>
+<span class="sourceLineNo">4139</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4139"></a>
+<span class="sourceLineNo">4140</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4140"></a>
+<span class="sourceLineNo">4141</span>  }<a name="line.4141"></a>
+<span class="sourceLineNo">4142</span><a name="line.4142"></a>
+<span class="sourceLineNo">4143</span>  /**<a name="line.4143"></a>
+<span class="sourceLineNo">4144</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4144"></a>
+<span class="sourceLineNo">4145</span>   * @throws IOException<a name="line.4145"></a>
+<span class="sourceLineNo">4146</span>   */<a name="line.4146"></a>
+<span class="sourceLineNo">4147</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4147"></a>
+<span class="sourceLineNo">4148</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4148"></a>
+<span class="sourceLineNo">4149</span>  }<a name="line.4149"></a>
+<span class="sourceLineNo">4150</span><a name="line.4150"></a>
+<span class="sourceLineNo">4151</span>  /**<a name="line.4151"></a>
+<span class="sourceLineNo">4152</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4152"></a>
+<span class="sourceLineNo">4153</span>   * @param timeoutMillis<a name="line.4153"></a>
+<span class="sourceLineNo">4154</span>   * @param labels<a name="line.4154"></a>
+<span class="sourceLineNo">4155</span>   */<a name="line.4155"></a>
+<span class="sourceLineNo">4156</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4156"></a>
+<span class="sourceLineNo">4157</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4157"></a>
+<span class="sourceLineNo">4158</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4158"></a>
+<span class="sourceLineNo">4159</span><a name="line.4159"></a>
+<span class="sourceLineNo">4160</span>      @Override<a name="line.4160"></a>
+<span class="sourceLineNo">4161</span>      public boolean evaluate() {<a name="line.4161"></a>
+<span class="sourceLineNo">4162</span>        for (String label : labels) {<a name="line.4162"></a>
+<span class="sourceLineNo">4163</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4163"></a>
+<span class="sourceLineNo">4164</span>            return false;<a name="line.4164"></a>
+<span class="sourceLineNo">4165</span>          }<a name="line.4165"></a>
+<span class="sourceLineNo">4166</span>        }<a name="line.4166"></a>
+<span class="sourceLineNo">4167</span>        return true;<a name="line.4167"></a>
+<span class="sourceLineNo">4168</span>      }<a name="line.4168"></a>
+<span class="sourceLineNo">4169</span><a name="line.4169"></a>
+<span class="sourceLineNo">4170</span>      @Override<a name="line.4170"></a>
+<span class="sourceLineNo">4171</span>      public String explainFailure() {<a name="line.4171"></a>
+<span class="sourceLineNo">4172</span>        for (String label : labels) {<a name="line.4172"></a>
+<span class="sourceLineNo">4173</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4173"></a>
+<span class="sourceLineNo">4174</span>            return label + " is not available yet";<a name="line.4174"></a>
+<span class="sourceLineNo">4175</span>          }<a name="line.4175"></a>
+<span class="sourceLineNo">4176</span>        }<a name="line.4176"></a>
+<span class="sourceLineNo">4177</span>        return "";<a name="line.4177"></a>
+<span class="sourceLineNo">4178</span>      }<a name="line.4178"></a>
+<span class="sourceLineNo">4179</span>    });<a name="line.4179"></a>
+<span class="sourceLineNo">4180</span>  }<a name="line.4180"></a>
+<span class="sourceLineNo">4181</span><a name="line.4181"></a>
+<span class="sourceLineNo">4182</span>  /**<a name="line.4182"></a>
+<span class="sourceLineNo">4183</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4183"></a>
+<span class="sourceLineNo">4184</span>   * encoding, bloom codecs available.<a name="line.4184"></a>
+<span class="sourceLineNo">4185</span>   * @return the list of column descriptors<a name="line.4185"></a>
+<span class="sourceLineNo">4186</span>   */<a name="line.4186"></a>
+<span class="sourceLineNo">4187</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4187"></a>
+<span class="sourceLineNo">4188</span>    return generateColumnDescriptors("");<a name="line.4188"></a>
+<span class="sourceLineNo">4189</span>  }<a name="line.4189"></a>
+<span class="sourceLineNo">4190</span><a name="line.4190"></a>
+<span class="sourceLineNo">4191</span>  /**<a name="line.4191"></a>
+<span class="sourceLineNo">4192</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4192"></a>
+<span class="sourceLineNo">4193</span>   * encoding, bloom codecs available.<a name="line.4193"></a>
+<span class="sourceLineNo">4194</span>   * @param prefix family names prefix<a name="line.4194"></a>
+<span class="sourceLineNo">4195</span>   * @return the list of column descriptors<a name="line.4195"></a>
+<span class="sourceLineNo">4196</span>   */<a name="line.4196"></a>
+<span class="sourceLineNo">4197</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4197"></a>
+<span class="sourceLineNo">4198</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4198"></a>
+<span class="sourceLineNo">4199</span>    long familyId = 0;<a name="line.4199"></a>
+<span class="sourceLineNo">4200</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4200"></a>
+<span class="sourceLineNo">4201</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4201"></a>
+<span class="sourceLineNo">4202</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4202"></a>
+<span class="sourceLineNo">4203</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4203"></a>
+<span class="sourceLineNo">4204</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4204"></a>
+<span class="sourceLineNo">4205</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4205"></a>
+<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4206"></a>
+<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4207"></a>
+<span class="sourceLineNo">4208</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4208"></a>
+<span class="sourceLineNo">4209</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4209"></a>
+<span class="sourceLineNo">4210</span>          familyId++;<a name="line.4210"></a>
+<span class="sourceLineNo">4211</span>        }<a name="line.4211"></a>
+<span class="sourceLineNo">4212</span>      }<a name="line.4212"></a>
+<span class="sourceLineNo">4213</span>    }<a name="line.4213"></a>
+<span class="sourceLineNo">4214</span>    return columnFamilyDescriptors;<a name="line.4214"></a>
+<span class="sourceLineNo">4215</span>  }<a name="line.4215"></a>
+<span class="sourceLineNo">4216</span><a name="line.4216"></a>
+<span class="sourceLineNo">4217</span>  /**<a name="line.4217"></a>
+<span class="sourceLineNo">4218</span>   * Get supported compression algorithms.<a name="line.4218"></a>
+<span class="sourceLineNo">4219</span>   * @return supported compression algorithms.<a name="line.4219"></a>
+<span class="sourceLineNo">4220</span>   */<a name="line.4220"></a>
+<span class="sourceLineNo">4221</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4221"></a>
+<span class="sourceLineNo">4222</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4222"></a>
+<span class="sourceLineNo">4223</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4223"></a>
+<span class="sourceLineNo">4224</span>    for (String algoName : allAlgos) {<a name="line.4224"></a>
+<span class="sourceLineNo">4225</span>      try {<a name="line.4225"></a>
+<span class="sourceLineNo">4226</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4226"></a>
+<span class="sourceLineNo">4227</span>        algo.getCompressor();<a name="line.4227"></a>
+<span class="sourceLineNo">4228</span>        supportedAlgos.add(algo);<a name="line.4228"></a>
+<span class="sourceLineNo">4229</span>      } catch (Throwable t) {<a name="line.4229"></a>
+<span class="sourceLineNo">4230</span>        // this algo is not available<a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>      }<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>    }<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>  }<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span><a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    scan.setReadType(ReadType.PREAD);<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    scan.setCaching(1);<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>    scan.setReversed(true);<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    scan.addFamily(family);<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>      scanner.next(cells);<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4245"></a>
+<span class="sourceLineNo">4246</span>        return null;<a name="line.4246"></a>
+<span class="sourceLineNo">4247</span>      }<a name="line.4247"></a>
+<span class="sourceLineNo">4248</span>      return Result.create(cells);<a name="line.4248"></a>
+<span class="sourceLineNo">4249</span>    }<a name="line.4249"></a>
+<span class="sourceLineNo">4250</span>  }<a name="line.4250"></a>
+<span class="sourceLineNo">4251</span><a name="line.4251"></a>
+<span class="sourceLineNo">4252</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4252"></a>
+<span class="sourceLineNo">4253</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4253"></a>
+<span class="sourceLineNo">4254</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4254"></a>
+<span class="sourceLineNo">4255</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4255"></a>
+<span class="sourceLineNo">4256</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4256"></a>
+<span class="sourceLineNo">4257</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4257"></a>
+<span class="sourceLineNo">4258</span>  }<a name="line.4258"></a>
+<span class="sourceLineNo">4259</span><a name="line.4259"></a>
+<span class="sourceLineNo">4260</span>  /**<a name="line.4260"></a>
+<span class="sourceLineNo">4261</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4261"></a>
+<span class="sourceLineNo">4262</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4262"></a>
+<span class="sourceLineNo">4263</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4263"></a>
+<span class="sourceLineNo">4264</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4264"></a>
+<span class="sourceLineNo">4265</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4265"></a>
+<span class="sourceLineNo">4266</span>   * less baggage. It came in in HBASE-5291.<a name="line.4266"></a>
+<span class="sourceLineNo">4267</span>   */<a name="line.4267"></a>
+<span class="sourceLineNo">4268</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4268"></a>
+<span class="sourceLineNo">4269</span>    Properties conf = MiniKdc.createConf();<a name="line.4269"></a>
+<span class="sourceLineNo">4270</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4270"></a>
+<span class="sourceLineNo">4271</span>    MiniKdc kdc = null;<a name="line.4271"></a>
+<span class="sourceLineNo">4272</span>    File dir = null;<a name="line.4272"></a>
+<span class="sourceLineNo">4273</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4273"></a>
+<span class="sourceLineNo">4274</span>    // another service captures the port in between which'll result in BindException.<a name="line.4274"></a>
+<span class="sourceLineNo">4275</span>    boolean bindException;<a name="line.4275"></a>
+<span class="sourceLineNo">4276</span>    int numTries = 0;<a name="line.4276"></a>
+<span class="sourceLineNo">4277</span>    do {<a name="line.4277"></a>
+<span class="sourceLineNo">4278</span>      try {<a name="line.4278"></a>
+<span class="sourceLineNo">4279</span>        bindException = false;<a name="line.4279"></a>
+<span class="sourceLineNo">4280</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4280"></a>
+<span class="sourceLineNo">4281</span>        kdc = new MiniKdc(conf, dir);<a name="line.4281"></a>
+<span class="sourceLineNo">4282</span>        kdc.start();<a name="line.4282"></a>
+<span class="sourceLineNo">4283</span>      } catch (BindException e) {<a name="line.4283"></a>
+<span class="sourceLineNo">4284</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4284"></a>
+<span class="sourceLineNo">4285</span>        numTries++;<a name="line.4285"></a>
+<span class="sourceLineNo">4286</span>        if (numTries == 3) {<a name="line.4286"></a>
+<span class="sourceLineNo">4287</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4287"></a>
+<span class="sourceLineNo">4288</span>          throw e;<a name="line.4288"></a>
+<span class="sourceLineNo">4289</span>        }<a name="line.4289"></a>
+<span class="sourceLineNo">4290</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4290"></a>
+<span class="sourceLineNo">4291</span>        bindException = true;<a name="line.4291"></a>
+<span class="sourceLineNo">4292</span>      }<a name="line.4292"></a>
+<span class="sourceLineNo">4293</span>    } while (bindException);<a name="line.4293"></a>
+<span class="sourceLineNo">4294</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>    return kdc;<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>  }<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span><a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>    int numHFiles = 0;<a name="line.4299"></a>
+<span class="sourceLineNo">4300</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4300"></a>
+<span class="sourceLineNo">4301</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4301"></a>
+<span class="sourceLineNo">4302</span>                                    family);<a name="line.4302"></a>
+<span class="sourceLineNo">4303</span>    }<a name="line.4303"></a>
+<span class="sourceLineNo">4304</span>    return numHFiles;<a name="line.4304"></a>
+<span class="sourceLineNo">4305</span>  }<a name="line.4305"></a>
+<span class="sourceLineNo">4306</span><a name="line.4306"></a>
+<span class="sourceLineNo">4307</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4307"></a>
+<span class="sourceLineNo">4308</span>                               final byte[] family) {<a name="line.4308"></a>
+<span class="sourceLineNo">4309</span>    int numHFiles = 0;<a name="line.4309"></a>
+<span class="sourceLineNo">4310</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4310"></a>
+<span class="sourceLineNo">4311</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4311"></a>
+<span class="sourceLineNo">4312</span>    }<a name="line.4312"></a>
+<span class="sourceLineNo">4313</span>    return numHFiles;<a name="line.4313"></a>
+<span class="sourceLineNo">4314</span>  }<a name="line.4314"></a>
+<span class="sourceLineNo">4315</span><a name="line.4315"></a>
+<span class="sourceLineNo">4316</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4316"></a>
+<span class="sourceLineNo">4317</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4317"></a>
+<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4318"></a>
+<span class="sourceLineNo">4319</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4319"></a>
+<span class="sourceLineNo">4320</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4320"></a>
+<span class="sourceLineNo">4321</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4321"></a>
+<span class="sourceLineNo">4322</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4322"></a>
+<span class="sourceLineNo">4323</span>      assertEquals(0,<a name="line.4323"></a>
+<span class="sourceLineNo">4324</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4324"></a>
+<span class="sourceLineNo">4325</span>    }<a name="line.4325"></a>
+<span class="sourceLineNo">4326</span>  }<a name="line.4326"></a>
+<span class="sourceLineNo">4327</span><a name="line.4327"></a>
+<span class="sourceLineNo">4328</span>  /**<a name="line.4328"></a>
+<span class="sourceLineNo">4329</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4329"></a>
+<span class="sourceLineNo">4330</span>   * invocations.<a name="line.4330"></a>
+<span class="sourceLineNo">4331</span>   */<a name="line.4331"></a>
+<span class="sourceLineNo">4332</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4332"></a>
+<span class="sourceLineNo">4333</span>    throws InterruptedException {<a name="line.4333"></a>
+<span class="sourceLineNo">4334</span>    try {<a name="line.4334"></a>
+<span class="sourceLineNo">4335</span>      while (!condition.getAsBoolean()) {<a name="line.4335"></a>
+<span class="sourceLineNo">4336</span>        Thread.sleep(sleepMillis);<a name="line.4336"></a>
+<span class="sourceLineNo">4337</span>      }<a name="line.4337"></a>
+<span class="sourceLineNo">4338</span>    } catch (RuntimeException e) {<a name="line.4338"></a>
+<span class="sourceLineNo">4339</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4339"></a>
+<span class="sourceLineNo">4340</span>        throw (AssertionError) e.getCause();<a name="line.4340"></a>
+<span class="sourceLineNo">4341</span>      }<a name="line.4341"></a>
+<span class="sourceLineNo">4342</span>      throw e;<a name="line.4342"></a>
+<span class="sourceLineNo">4343</span>    }<a name="line.4343"></a>
+<span class="sourceLineNo">4344</span>  }<a name="line.4344"></a>
+<span class="sourceLineNo">4345</span>}<a name="line.4345"></a>
 
 
 
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index c0bb63b..fad907f 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1934,6 +1934,7 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithACLTagObserver.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithACLTagObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPreadReversedScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestPrefetch.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestPrefetch</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestPrefixFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestPriorityRpc.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestPriorityRpc</a></li>
@@ -2567,7 +2568,6 @@
 <li><a href="org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestSize</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSizeFailures</a></li>
 <li><a href="org/apache/hadoop/hbase/namequeues/TestSlowLogAccessor.html" title="class in org.apache.hadoop.hbase.namequeues" target="classFrame">TestSlowLogAccessor</a></li>
-<li><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSmallReversedScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner" target="classFrame">TestSnapshotCleanerChore</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.StoppableImplementation.html" title="class in org.apache.hadoop.hbase.master.cleaner" target="classFrame">TestSnapshotCleanerChore.StoppableImplementation</a></li>
 <li><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestSnapshotClientRetries</a></li>
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 7527937..2a631b6 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1934,6 +1934,7 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithACLTagObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithACLTagObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestPrefetch.html" title="class in org.apache.hadoop.hbase.io.hfile">TestPrefetch</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">TestPrefixFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestPriorityRpc.html" title="class in org.apache.hadoop.hbase.regionserver">TestPriorityRpc</a></li>
@@ -2567,7 +2568,6 @@
 <li><a href="org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase">TestSize</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></li>
 <li><a href="org/apache/hadoop/hbase/namequeues/TestSlowLogAccessor.html" title="class in org.apache.hadoop.hbase.namequeues">TestSlowLogAccessor</a></li>
-<li><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestSnapshotCleanerChore</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.StoppableImplementation.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestSnapshotCleanerChore.StoppableImplementation</a></li>
 <li><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotClientRetries</a></li>
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index f008098..c5aa5d4 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5340,6 +5340,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestOperation.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client">TestOperation</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client">TestPutDeleteEtcCellIteration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPutDotHas.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client">TestPutDotHas</a></dt>
@@ -5426,8 +5428,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotCloneIndependence</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotDFSTemporaryDirectory.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotDFSTemporaryDirectory.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotDFSTemporaryDirectory</a></dt>
@@ -9230,7 +9230,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/TestTableScan.html#COLUMN_EMPTY">COLUMN_EMPTY</a></span> - Static variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestTableScan.html" title="class in org.apache.hadoop.hbase.rest">TestTableScan</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestColumnPaginationFilter.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestColumnPaginationFilter.html" title="class in org.apache.hadoop.hbase.filter">TestColumnPaginationFilter</a></dt>
 <dd>&nbsp;</dd>
@@ -24431,7 +24431,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolBase.html#ht2TargetAtPeer1">ht2TargetAtPeer1</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationSyncUpToolBase</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#htable">htable</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#htable">htable</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSCVFWithMiniCluster.html#htable">htable</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSCVFWithMiniCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSCVFWithMiniCluster</a></dt>
 <dd>&nbsp;</dd>
@@ -28066,6 +28066,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestReplicasClient.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicasClient.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster</a></dt>
@@ -28084,8 +28086,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotCloneIndependence</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromClient</a></dt>
@@ -40157,7 +40157,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#reversed">reversed</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html#reverseScanTest-org.apache.hadoop.hbase.client.Table-boolean-">reverseScanTest(Table, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide5</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html#reverseScanTest-org.apache.hadoop.hbase.client.Table-org.apache.hadoop.hbase.client.Scan.ReadType-">reverseScanTest(Table, Scan.ReadType)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide5</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterCoprocessorServices.MockAccessController.html#revoke-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeRequest-org.apache.hbase.thirdparty.com.google.protobuf.RpcCallback-">revoke(RpcController, AccessControlProtos.RevokeRequest, RpcCallback&lt;AccessControlProtos.RevokeResponse&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterCoprocessorServices.MockAccessController.html" title="class in org.apache.hadoop.hbase.master">TestMasterCoprocessorServices.MockAccessController</a></dt>
 <dd>&nbsp;</dd>
@@ -44801,6 +44801,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client">TestMvccConsistentScanner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client">TestPutWithDelete</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
@@ -44823,8 +44825,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html" title="class in org.apache.hadoop.hbase.client">TestSplitOrMergeAtTableLevel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html#setupBeforeClass--">setupBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html" title="class in org.apache.hadoop.hbase.client">TestTableFavoredNodes</a></dt>
@@ -48967,6 +48967,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMultiActionMetricsFromClient.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMultiActionMetricsFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMultiActionMetricsFromClient</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableLimitedScanWithFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></dt>
@@ -48983,8 +48985,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.html" title="class in org.apache.hadoop.hbase.client">TestScanWithoutFetchingData</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotTemporaryDirectory.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotTemporaryDirectory.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotTemporaryDirectory</a></dt>
@@ -49927,6 +49927,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableLimitedScanWithFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></dt>
@@ -49939,8 +49941,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestServerLoadDurability.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestServerLoadDurability.html" title="class in org.apache.hadoop.hbase.client">TestServerLoadDurability</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotCloneIndependence</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromClient</a></dt>
@@ -50769,6 +50769,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client">TestMvccConsistentScanner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client">TestPutWithDelete</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
@@ -50791,8 +50793,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html" title="class in org.apache.hadoop.hbase.client">TestSplitOrMergeAtTableLevel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html" title="class in org.apache.hadoop.hbase.client">TestTableFavoredNodes</a></dt>
@@ -52035,6 +52035,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMutationGetCellBuilder.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMutationGetCellBuilder.html" title="class in org.apache.hadoop.hbase.client">TestMutationGetCellBuilder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client">TestPutWithDelete</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></dt>
@@ -52059,8 +52061,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSplitOrMergeAtTableLevel.html" title="class in org.apache.hadoop.hbase.client">TestSplitOrMergeAtTableLevel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html" title="class in org.apache.hadoop.hbase.client">TestSplitOrMergeStatus</a></dt>
@@ -67948,6 +67948,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html#testPreadNotEnabledForCompactionStoreScanners--">testPreadNotEnabledForCompactionStoreScanners()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreScanner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testPreadReversedScan01--">testPreadReversedScan01()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>
+<div class="block">all rowKeys are fit in the last region.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testPreadReversedScanInternal-java.lang.String:A-">testPreadReversedScanInternal(String[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPreadReversedScanner</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TestPreadReversedScanner--">TestPreadReversedScanner()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide3.html#testPreBatchMutate-org.apache.hadoop.hbase.TableName-java.lang.Runnable-">testPreBatchMutate(TableName, Runnable)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestParseFilter.html#testPrecedence1--">testPrecedence1()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestParseFilter.html" title="class in org.apache.hadoop.hbase.filter">TestParseFilter</a></dt>
@@ -73975,21 +73985,13 @@
 <dd>
 <div class="block">During compaction, cells smaller than the threshold won't be affected.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScan01--">testSmallReversedScan01()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>
-<div class="block">all rowKeys are fit in the last region.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScan02--">testSmallReversedScan02()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testSmallReversedScan02--">testSmallReversedScan02()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></dt>
 <dd>
 <div class="block">Corner case:
-  HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in region (-oo,b) .</div>
+ <p/>
+ HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in
+ region (-oo,b) .</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScanInternal-java.lang.String:A-">testSmallReversedScanInternal(String[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSmallReversedScanner</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TestSmallReversedScanner--">TestSmallReversedScanner()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html#testSmallReversedScanUnderMultiRegions--">testSmallReversedScanUnderMultiRegions()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide5.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide5</a></dt>
 <dd>
 <div class="block">Tests reversed scan under multi regions</div>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index 75d100a..aaa959e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2157">HBaseTestingUtility.SeenRowTracker</a>
+<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2158">HBaseTestingUtility.SeenRowTracker</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">A tracker for tracking and validating table rows
  generated with <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>HBaseTestingUtility.loadTable(Table, byte[])</code></a></div>
@@ -231,7 +231,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dim</h4>
-<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2158">dim</a></pre>
+<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2159">dim</a></pre>
 </li>
 </ul>
 <a name="seenRows">
@@ -240,7 +240,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>seenRows</h4>
-<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2159">seenRows</a></pre>
+<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2160">seenRows</a></pre>
 </li>
 </ul>
 <a name="startRow">
@@ -249,7 +249,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2160">startRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2161">startRow</a></pre>
 </li>
 </ul>
 <a name="stopRow">
@@ -258,7 +258,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stopRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2161">stopRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2162">stopRow</a></pre>
 </li>
 </ul>
 </li>
@@ -275,7 +275,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SeenRowTracker</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2163">SeenRowTracker</a>(byte[]&nbsp;startRow,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2164">SeenRowTracker</a>(byte[]&nbsp;startRow,
                       byte[]&nbsp;stopRow)</pre>
 </li>
 </ul>
@@ -293,7 +293,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>reset</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2168">reset</a>()</pre>
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2169">reset</a>()</pre>
 </li>
 </ul>
 <a name="i-byte-">
@@ -302,7 +302,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>i</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2174">i</a>(byte&nbsp;b)</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2175">i</a>(byte&nbsp;b)</pre>
 </li>
 </ul>
 <a name="addRow-byte:A-">
@@ -311,7 +311,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2178">addRow</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2179">addRow</a>(byte[]&nbsp;row)</pre>
 </li>
 </ul>
 <a name="validate--">
@@ -320,7 +320,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>validate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2185">validate</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2186">validate</a>()</pre>
 <div class="block">Validate that all the rows between startRow and stopRow are seen exactly once, and
  all other rows none</div>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 0f09845..e24a5e6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -124,7 +124,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.175">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.176">HBaseTestingUtility</a>
 extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
 <div class="block">Facility for testing HBase. Replacement for
  old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -2070,7 +2070,7 @@
 <li class="blockList">
 <h4>TEST_DIRECTORY_KEY</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.185">TEST_DIRECTORY_KEY</a></pre>
+private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.186">TEST_DIRECTORY_KEY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.</span></div>
 <div class="block">System property key to get test directory value. Name is as it is because mini dfs has
  hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property
@@ -2088,7 +2088,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_PER_SERVER_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.187">REGIONS_PER_SERVER_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -2101,7 +2101,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.192">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
 <div class="block">The default number of regions per regionserver when creating a pre-split
  table.</div>
 <dl>
@@ -2116,7 +2116,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.195">PRESPLIT_TEST_TABLE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -2129,7 +2129,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -2142,7 +2142,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dfsCluster</h4>
-<pre>private&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.198">dfsCluster</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.199">dfsCluster</a></pre>
 </li>
 </ul>
 <a name="hbaseCluster">
@@ -2151,7 +2151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hbaseCluster</h4>
-<pre>private volatile&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.200">hbaseCluster</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.201">hbaseCluster</a></pre>
 </li>
 </ul>
 <a name="mrCluster">
@@ -2160,7 +2160,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>mrCluster</h4>
-<pre>private&nbsp;org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.201">mrCluster</a></pre>
+<pre>private&nbsp;org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.202">mrCluster</a></pre>
 </li>
 </ul>
 <a name="miniClusterRunning">
@@ -2169,7 +2169,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>miniClusterRunning</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.204">miniClusterRunning</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.205">miniClusterRunning</a></pre>
 <div class="block">If there is a mini cluster running for this testing utility instance.</div>
 </li>
 </ul>
@@ -2179,7 +2179,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>hadoopLogDir</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.206">hadoopLogDir</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.207">hadoopLogDir</a></pre>
 </li>
 </ul>
 <a name="dataTestDirOnTestFS">
@@ -2188,7 +2188,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dataTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.210">dataTestDirOnTestFS</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.211">dataTestDirOnTestFS</a></pre>
 <div class="block">Directory on test filesystem where we put the data for this instance of
  HBaseTestingUtility</div>
 </li>
@@ -2199,7 +2199,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>asyncConnection</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;org.apache.hadoop.hbase.client.AsyncClusterConnection&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.212">asyncConnection</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;org.apache.hadoop.hbase.client.AsyncClusterConnection&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.213">asyncConnection</a></pre>
 </li>
 </ul>
 <a name="FS_URI">
@@ -2208,7 +2208,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FS_URI</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.215">FS_URI</a></pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.216">FS_URI</a></pre>
 <div class="block">Filesystem URI used for map-reduce mini-cluster setup</div>
 </li>
 </ul>
@@ -2218,7 +2218,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.218">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.219">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
 <div class="block">This is for unit tests parameterized with a single boolean.</div>
 </li>
 </ul>
@@ -2228,7 +2228,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.294">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.295">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
 </li>
 </ul>
 <a name="fam1">
@@ -2237,7 +2237,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam1</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1879">fam1</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1880">fam1</a></pre>
 </li>
 </ul>
 <a name="fam2">
@@ -2246,7 +2246,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam2</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1880">fam2</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1881">fam2</a></pre>
 </li>
 </ul>
 <a name="fam3">
@@ -2255,7 +2255,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fam3</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1881">fam3</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1882">fam3</a></pre>
 </li>
 </ul>
 <a name="COLUMNS">
@@ -2264,7 +2264,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMNS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1882">COLUMNS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1883">COLUMNS</a></pre>
 </li>
 </ul>
 <a name="MAXVERSIONS">
@@ -2273,7 +2273,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MAXVERSIONS</h4>
-<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1883">MAXVERSIONS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1884">MAXVERSIONS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.MAXVERSIONS">Constant Field Values</a></dd>
@@ -2286,7 +2286,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FIRST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1885">FIRST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1886">FIRST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -2299,7 +2299,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LAST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1886">LAST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1887">LAST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -2312,7 +2312,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1887">START_KEY_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1888">START_KEY_BYTES</a></pre>
 </li>
 </ul>
 <a name="START_KEY">
@@ -2321,7 +2321,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1888">START_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1889">START_KEY</a></pre>
 </li>
 </ul>
 <a name="ROWS">
@@ -2330,7 +2330,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2425">ROWS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2426">ROWS</a></pre>
 <div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
 </li>
 </ul>
@@ -2340,7 +2340,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2440">KEYS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2441">KEYS</a></pre>
 </li>
 </ul>
 <a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2349,7 +2349,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2452">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2453">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
 </li>
 </ul>
 <a name="hbaseAdmin">
@@ -2358,7 +2358,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hbaseAdmin</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3059">hbaseAdmin</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3060">hbaseAdmin</a></pre>
 </li>
 </ul>
 </li>
@@ -2375,7 +2375,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.305">HBaseTestingUtility</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.306">HBaseTestingUtility</a>()</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a default configuration.
 
  <p>Initially, all tmp files are written to a local test data directory.
@@ -2389,7 +2389,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.318">HBaseTestingUtility</a>(@Nullable
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.319">HBaseTestingUtility</a>(@Nullable
                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a given configuration.
 
@@ -2416,7 +2416,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>available</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.226">available</a>(int&nbsp;port)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.227">available</a>(int&nbsp;port)</pre>
 <div class="block">Checks to see if a specific port is available.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2432,7 +2432,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>bloomAndCompressionCombinations</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.258">bloomAndCompressionCombinations</a>()</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.259">bloomAndCompressionCombinations</a>()</pre>
 <div class="block">Create all combinations of Bloom filters and compression algorithms for
  testing.</div>
 </li>
@@ -2443,7 +2443,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSAndTagsCombination</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.272">memStoreTSAndTagsCombination</a>()</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.273">memStoreTSAndTagsCombination</a>()</pre>
 <div class="block">Create combination of memstoreTS and tags</div>
 </li>
 </ul>
@@ -2453,7 +2453,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.281">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.282">memStoreTSTagsAndOffheapCombination</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionAndWAL-org.apache.hadoop.hbase.regionserver.Region-">
@@ -2462,7 +2462,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.347">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.348">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2477,7 +2477,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.354">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.355">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2492,7 +2492,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.374">getConfiguration</a>()</pre>
 <div class="block">Returns this classes's instance of <code>Configuration</code>.  Be careful how
  you use the returned Configuration since <code>Connection</code> instances
  can be shared.  The Map of Connections is keyed by the Configuration.  If
@@ -2515,7 +2515,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.377">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.378">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
 </li>
 </ul>
 <a name="setupDataTestDir--">
@@ -2524,7 +2524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.398">setupDataTestDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.399">setupDataTestDir</a>()</pre>
 <div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
  Give it a random name so can have many concurrent tests running if
  we need to.  It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2551,7 +2551,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createSubDirAndSystemProperty</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.421">createSubDirAndSystemProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;propertyName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.422">createSubDirAndSystemProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;propertyName,
                                            org.apache.hadoop.fs.Path&nbsp;parent,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subDirName)</pre>
 </li>
@@ -2562,7 +2562,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBaseTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.453">getBaseTestDirOnTestFS</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.454">getBaseTestDirOnTestFS</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2582,7 +2582,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.464">getDataTestDirOnTestFS</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.465">getDataTestDirOnTestFS</a>()
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2601,7 +2601,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.479">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.480">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2622,7 +2622,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDirOnTestFS</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.487">setupDataTestDirOnTestFS</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.488">setupDataTestDirOnTestFS</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sets up a path in test filesystem to be used by tests.
  Creates a new directory if not already setup.</div>
@@ -2638,7 +2638,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewDataTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.499">getNewDataTestDirOnTestFS</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.500">getNewDataTestDirOnTestFS</a>()
                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sets up a new path in test filesystem to be used by tests.</div>
 <dl>
@@ -2653,7 +2653,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.524">cleanupDataTestDirOnTestFS</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.525">cleanupDataTestDirOnTestFS</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Cleans the test data directory on the test filesystem.</div>
 <dl>
@@ -2670,7 +2670,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.536">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.537">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;subdirName)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Cleans a subdirectory under the test data directory on the test filesystem.</div>
 <dl>
@@ -2687,7 +2687,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.548">startMiniDFSCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.549">startMiniDFSCluster</a>(int&nbsp;servers)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.</div>
 <dl>
@@ -2708,7 +2708,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.563">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.564">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.
  This is useful if you want to run datanode on distinct hosts for things
@@ -2733,7 +2733,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.581">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.582">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start a minidfscluster.
@@ -2757,7 +2757,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.586">setFs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.587">setFs</a>()
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2771,7 +2771,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.598">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.599">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;racks,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;hosts)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2787,7 +2787,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.626">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.627">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2801,7 +2801,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirsAndSetProperties</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.649">createDirsAndSetProperties</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.650">createDirsAndSetProperties</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is used before starting HDFS and map-reduce mini-clusters Run something like the below to
  check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in
@@ -2825,7 +2825,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isNewVersionBehaviorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.692">isNewVersionBehaviorEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.693">isNewVersionBehaviorEnabled</a>()</pre>
 <div class="block">Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating
   new column families. Default to false.</div>
 </li>
@@ -2836,7 +2836,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadShortCircuitOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.706">isReadShortCircuitOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.707">isReadShortCircuitOn</a>()</pre>
 <div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
   This allows to specify this parameter on the command line.
    If not set, default is true.</div>
@@ -2848,7 +2848,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>enableShortCircuit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.719">enableShortCircuit</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.720">enableShortCircuit</a>()</pre>
 <div class="block">Enable the short circuit read, unless configured differently.
  Set both HBase and HDFS settings, including skipping the hdfs checksum checks.</div>
 </li>
@@ -2859,7 +2859,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirAndSetProperty</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.734">createDirAndSetProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;property)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.735">createDirAndSetProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;property)</pre>
 </li>
 </ul>
 <a name="createDirAndSetProperty-java.lang.String-java.lang.String-">
@@ -2868,7 +2868,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirAndSetProperty</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.738">createDirAndSetProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;relPath,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.739">createDirAndSetProperty</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;relPath,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;property)</pre>
 </li>
 </ul>
@@ -2878,7 +2878,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.752">shutdownMiniDFSCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.753">shutdownMiniDFSCluster</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
  or does nothing.</div>
@@ -2895,7 +2895,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.774">startMiniCluster</a>(boolean&nbsp;createWALDir)
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.775">startMiniCluster</a>(boolean&nbsp;createWALDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
    <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2922,7 +2922,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.793">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.794">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -2951,7 +2951,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir,
                                                      boolean&nbsp;createWALDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2982,7 +2982,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.836">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.837">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3013,7 +3013,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.857">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.858">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -3042,7 +3042,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.879">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.880">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
                                                      boolean&nbsp;createRootDir)
@@ -3076,7 +3076,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.902">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.903">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3108,7 +3108,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.924">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.925">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3139,7 +3139,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.949">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.950">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hadoop.hbase.master.HMaster&gt;&nbsp;masterClass,
@@ -3175,7 +3175,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.979">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.980">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
@@ -3213,7 +3213,7 @@
 <li class="blockList">
 <h4>startMiniCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1011">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1012">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;dataNodeHosts,
@@ -3254,7 +3254,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1031">startMiniCluster</a>(int&nbsp;numSlaves)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1032">startMiniCluster</a>(int&nbsp;numSlaves)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
  All other options will use default values, defined in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3275,7 +3275,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1043">startMiniCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1044">startMiniCluster</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
  Option default value can be found in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3294,7 +3294,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1053">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1054">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
  It modifies Configuration.  It homes the cluster data directory under a random
@@ -3313,7 +3313,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1090">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1091">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster. Usually you won't want this. You'll usually want
@@ -3336,7 +3336,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1142">startMiniHBaseCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1143">startMiniHBaseCluster</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster using default options.
@@ -3358,7 +3358,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1160">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1161">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3390,7 +3390,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1182">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1183">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;rsPorts)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -3424,7 +3424,7 @@
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1208">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1209">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;rsPorts,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hadoop.hbase.master.HMaster&gt;&nbsp;masterClass,
@@ -3465,7 +3465,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1224">restartHBaseCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1225">restartHBaseCluster</a>(int&nbsp;servers)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts the hbase cluster up again after shutting it down previously in a
@@ -3485,7 +3485,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">restartHBaseCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1229">restartHBaseCluster</a>(int&nbsp;servers,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;ports)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3502,7 +3502,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1236">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1237">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -3518,7 +3518,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1261">getMiniHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1262">getMiniHBaseCluster</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current mini hbase cluster. Only has something in it after a call
@@ -3534,7 +3534,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">shutdownMiniCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">shutdownMiniCluster</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
 <dl>
@@ -3551,7 +3551,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">shutdownMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">shutdownMiniHBaseCluster</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3566,7 +3566,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>killMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1306">killMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1307">killMiniHBaseCluster</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3581,7 +3581,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1319">cleanup</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1320">cleanup</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3595,7 +3595,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1334">getDefaultRootDirPath</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1335">getDefaultRootDirPath</a>(boolean&nbsp;create)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns the path to the default root dir the minicluster uses. If <code>create</code>
  is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3615,7 +3615,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1349">getDefaultRootDirPath</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1350">getDefaultRootDirPath</a>()
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
  except that <code>create</code> flag is false.
@@ -3634,7 +3634,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1365">createRootDir</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1366">createRootDir</a>(boolean&nbsp;create)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates an hbase rootdir in user home directory.  Also creates hbase
  version file.  Normally you won't make use of this method.  Root hbasedir
@@ -3659,7 +3659,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1380">createRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1381">createRootDir</a>()
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
  except that <code>create</code> flag is false.</div>
@@ -3677,7 +3677,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1393">createWALRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1394">createWALRootDir</a>()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a hbase walDir in the user's home directory.
  Normally you won't make use of this method. Root hbaseWALDir
@@ -3697,7 +3697,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseFsTmpDir</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1401">setHBaseFsTmpDir</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1402">setHBaseFsTmpDir</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3711,7 +3711,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1415">flush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1416">flush</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3726,7 +3726,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1423">flush</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1424">flush</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3741,7 +3741,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1431">compact</a>(boolean&nbsp;major)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1432">compact</a>(boolean&nbsp;major)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Compact all regions in the mini hbase cluster</div>
 <dl>
@@ -3756,7 +3756,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1439">compact</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1440">compact</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                     boolean&nbsp;major)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Compact all of a table's reagion in the mini hbase cluster</div>
@@ -3772,7 +3772,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1450">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1451">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;family)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3793,7 +3793,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1462">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1463">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;families)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3814,7 +3814,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1478">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1479">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[]&nbsp;family)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3835,7 +3835,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1491">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1492">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                    byte[]&nbsp;family,
                                                                    int&nbsp;numRegions)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3858,7 +3858,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1508">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1509">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3879,7 +3879,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1520">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1521">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                    byte[][]&nbsp;families)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table with multiple regions.</div>
@@ -3900,7 +3900,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1532">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1533">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                    int&nbsp;replicaCount,
                                                                    byte[][]&nbsp;families)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3923,7 +3923,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1545">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1546">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         byte[][]&nbsp;splitKeys)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3946,7 +3946,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1559">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1560">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         byte[][]&nbsp;splitKeys,
                                                         int&nbsp;replicaCount)
@@ -3971,7 +3971,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1565">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1566">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int&nbsp;numVersions,
                                                         byte[]&nbsp;startKey,
@@ -3990,7 +3990,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1581">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1582">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
                                                         byte[][]&nbsp;families,
                                                         org.apache.hadoop.conf.Configuration&nbsp;c)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4011,7 +4011,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1595">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1596">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
                                                         byte[][]&nbsp;families,
                                                         byte[][]&nbsp;splitKeys,
                                                         org.apache.hadoop.conf.Configuration&nbsp;c)
@@ -4036,7 +4036,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1615">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1616">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
                                                         byte[][]&nbsp;families,
                                                         byte[][]&nbsp;splitKeys,
                                                         org.apache.hadoop.hbase.regionserver.BloomType&nbsp;type,
@@ -4065,7 +4065,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1646">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1647">createTable</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
                                                         byte[][]&nbsp;splitRows)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -4086,7 +4086,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1675">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1676">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         byte[][]&nbsp;splitKeys,
                                                         int&nbsp;replicaCount,
@@ -4113,7 +4113,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1686">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1687">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[]&nbsp;family,
                                                         int&nbsp;numVersions)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4132,7 +4132,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1694">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1695">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int&nbsp;numVersions)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4151,7 +4151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1703">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1704">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int&nbsp;numVersions,
                                                         byte[][]&nbsp;splitKeys)
@@ -4171,7 +4171,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1729">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1730">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                    byte[][]&nbsp;families,
                                                                    int&nbsp;numVersions)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4190,7 +4190,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1738">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1739">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int&nbsp;numVersions,
                                                         int&nbsp;blockSize)
@@ -4210,7 +4210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1756">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1757">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int&nbsp;numVersions,
                                                         int&nbsp;blockSize,
@@ -4228,7 +4228,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1781">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1782">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[][]&nbsp;families,
                                                         int[]&nbsp;numVersions)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4247,7 +4247,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1805">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1806">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                         byte[]&nbsp;family,
                                                         byte[][]&nbsp;splitRows)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4266,7 +4266,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1824">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1825">createMultiRegionTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                    byte[]&nbsp;family)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table with multiple regions.</div>
@@ -4285,7 +4285,7 @@
 <li class="blockList">
 <h4>modifyTableSync</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1836">modifyTableSync</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin,
+public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1837">modifyTableSync</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin,
                                                org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -4308,7 +4308,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicas</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1844">setReplicas</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1845">setReplicas</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin,
                                org.apache.hadoop.hbase.TableName&nbsp;table,
                                int&nbsp;replicaCount)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -4327,7 +4327,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1855">deleteTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1856">deleteTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Drop an existing table</div>
 <dl>
@@ -4344,7 +4344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableIfAny</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1868">deleteTableIfAny</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1869">deleteTableIfAny</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Drop an existing table</div>
 <dl>
@@ -4361,7 +4361,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createModifyableTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1890">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1891">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="createTableDescriptor-org.apache.hadoop.hbase.TableName-int-int-int-org.apache.hadoop.hbase.KeepDeletedCells-">
@@ -4370,7 +4370,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1896">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1897">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
                                                                             int&nbsp;minVersions,
                                                                             int&nbsp;versions,
                                                                             int&nbsp;ttl,
@@ -4383,7 +4383,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createModifyableTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1911">createModifyableTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1912">createModifyableTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
                                                                                              int&nbsp;minVersions,
                                                                                              int&nbsp;versions,
                                                                                              int&nbsp;ttl,
@@ -4396,7 +4396,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1931">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1932">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;name)</pre>
 <div class="block">Create a table of name <code>name</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -4412,7 +4412,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1936">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1937">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                             byte[]&nbsp;family)</pre>
 </li>
 </ul>
@@ -4422,7 +4422,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableDescriptor</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1940">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1941">createTableDescriptor</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                             byte[][]&nbsp;families,
                                                                             int&nbsp;maxVersions)</pre>
 </li>
@@ -4433,7 +4433,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1961">createLocalHRegion</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1962">createLocalHRegion</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
                                                                        byte[]&nbsp;startKey,
                                                                        byte[]&nbsp;endKey)
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4456,7 +4456,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1972">createLocalHRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1973">createLocalHRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                        org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc)
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call
@@ -4473,7 +4473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1985">createLocalHRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1986">createLocalHRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                        org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                        org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
                                                                        org.apache.hadoop.hbase.wal.WAL&nbsp;wal)
@@ -4498,7 +4498,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2000">createLocalHRegion</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2001">createLocalHRegion</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                        byte[]&nbsp;startKey,
                                                                        byte[]&nbsp;stopKey,
                                                                        org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -4528,7 +4528,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createLocalHRegionWithInMemoryFlags</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2007">createLocalHRegionWithInMemoryFlags</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2008">createLocalHRegionWithInMemoryFlags</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                                         byte[]&nbsp;startKey,
                                                                                         byte[]&nbsp;stopKey,
                                                                                         org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -4550,7 +4550,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableData</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2042">deleteTableData</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2043">deleteTableData</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Provide an existing table name to truncate.
  Scans the table and issues a delete for each row read.</div>
@@ -4570,7 +4570,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2062">truncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2063">truncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                           boolean&nbsp;preserveRegions)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Truncate a table using the admin command.
@@ -4592,7 +4592,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2081">truncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2082">truncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Truncate a table using the admin command.
  Effectively disables, deletes, and recreates the table.
@@ -4615,7 +4615,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2092">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2093">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                      byte[]&nbsp;f)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load table with rows from 'aaa' to 'zzz'.</div>
@@ -4636,7 +4636,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2103">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2104">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                      byte[]&nbsp;f,
                      boolean&nbsp;writeToWAL)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4658,7 +4658,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2114">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2115">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                      byte[][]&nbsp;f)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load table of multiple column families with rows from 'aaa' to 'zzz'.</div>
@@ -4679,7 +4679,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2126">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2127">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                      byte[][]&nbsp;f,
                      byte[]&nbsp;value)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4702,7 +4702,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2138">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2139">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                      byte[][]&nbsp;f,
                      byte[]&nbsp;value,
                      boolean&nbsp;writeToWAL)
@@ -4726,7 +4726,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2206">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2207">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r,
                       byte[]&nbsp;f)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4741,7 +4741,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2210">loadRegion</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2211">loadRegion</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r,
                       byte[]&nbsp;f)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4756,7 +4756,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2222">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2223">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r,
                       byte[]&nbsp;f,
                       boolean&nbsp;flush)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4779,7 +4779,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2259">loadNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2260">loadNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                             byte[]&nbsp;f,
                             int&nbsp;startRow,
                             int&nbsp;endRow)
@@ -4796,7 +4796,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRandomRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2269">loadRandomRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2270">loadRandomRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                            byte[]&nbsp;f,
                            int&nbsp;rowSize,
                            int&nbsp;totalRows)
@@ -4813,7 +4813,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2281">verifyNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2282">verifyNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4831,7 +4831,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2300">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2301">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4848,7 +4848,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2305">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2306">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4865,7 +4865,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2310">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2311">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4883,7 +4883,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2315">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2316">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow,
@@ -4901,7 +4901,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNumericRows</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2335">deleteNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2336">deleteNumericRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;t,
                               byte[]&nbsp;f,
                               int&nbsp;startRow,
                               int&nbsp;endRow)
@@ -4918,7 +4918,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2350">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2351">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the number of rows in the given table.</div>
 <dl>
@@ -4937,7 +4937,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2354">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2355">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                             org.apache.hadoop.hbase.client.Scan&nbsp;scan)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4952,7 +4952,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2364">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2365">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                      byte[]...&nbsp;families)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4967,7 +4967,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2375">countRows</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2376">countRows</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the number of rows in the given table.</div>
 <dl>
@@ -4982,7 +4982,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2384">countRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2385">countRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4996,7 +4996,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2388">countRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2389">countRows</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
                      org.apache.hadoop.hbase.client.Scan&nbsp;scan)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5011,7 +5011,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2397">countRows</a>(org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;scanner)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2398">countRows</a>(org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;scanner)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5025,7 +5025,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>checksumRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2412">checksumRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2413">checksumRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Return an md5 digest of the entire contents of a table.</div>
 <dl>
@@ -5040,7 +5040,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionsInMeta</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.RegionInfo&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2474">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.RegionInfo&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2475">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                                 org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
                                                                                 byte[][]&nbsp;startKeys)
                                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5065,7 +5065,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createWal</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2500">createWal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2501">createWal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                         org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                         org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5082,7 +5082,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2514">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2515">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd)
@@ -5101,7 +5101,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2523">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2524">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
@@ -5121,7 +5121,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2535">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2536">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
@@ -5141,7 +5141,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionAndWAL</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2548">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
+<pre>public static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2549">createRegionAndWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;info,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;htd,
@@ -5161,7 +5161,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2562">getMetaTableRows</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2563">getMetaTableRows</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns all rows from the hbase:meta table.</div>
 <dl>
@@ -5176,7 +5176,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2582">getMetaTableRows</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2583">getMetaTableRows</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns all rows from the hbase:meta table for a given user table</div>
 <dl>
@@ -5191,7 +5191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.RegionInfo&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2613">getRegions</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.RegionInfo&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2614">getRegions</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns all regions of the specified table</div>
 <dl>
@@ -5210,7 +5210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOtherRegionServer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2624">getOtherRegionServer</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2625">getOtherRegionServer</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="getRSForFirstRegionInTable-org.apache.hadoop.hbase.TableName-">
@@ -5219,7 +5219,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSForFirstRegionInTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2642">getRSForFirstRegionInTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2643">getRSForFirstRegionInTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Tool to get the reference to the region server object that holds the
@@ -5241,7 +5241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniMapReduceCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.mapred.MiniMRCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2680">startMiniMapReduceCluster</a>()
+<pre>public&nbsp;org.apache.hadoop.mapred.MiniMRCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2681">startMiniMapReduceCluster</a>()
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts a <code>MiniMRCluster</code> with a default number of
  <code>TaskTracker</code>'s.</div>
@@ -5257,7 +5257,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>forceChangeTaskLogDir</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2693">forceChangeTaskLogDir</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2694">forceChangeTaskLogDir</a>()</pre>
 <div class="block">Tasktracker has a bug where changing the hadoop.log.dir system property
  will not change its internal static LOG_DIR variable.</div>
 </li>
@@ -5268,7 +5268,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniMapReduceCluster</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2721">startMiniMapReduceCluster</a>(int&nbsp;servers)
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2722">startMiniMapReduceCluster</a>(int&nbsp;servers)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts a <code>MiniMRCluster</code>. Call <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#setFileSystemURI-java.lang.String-"><code>setFileSystemURI(String)</code></a> to use a different
  filesystem.</div>
@@ -5286,7 +5286,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniMapReduceCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2790">shutdownMiniMapReduceCluster</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2791">shutdownMiniMapReduceCluster</a>()</pre>
 <div class="block">Stops the previously started <code>MiniMRCluster</code>.</div>
 </li>
 </ul>
@@ -5296,7 +5296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2804">createMockRegionServerService</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2805">createMockRegionServerService</a>()
                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.</div>
 <dl>
@@ -5311,7 +5311,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2812">createMockRegionServerService</a>(org.apache.hadoop.hbase.ipc.RpcServerInterface&nbsp;rpc)
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2813">createMockRegionServerService</a>(org.apache.hadoop.hbase.ipc.RpcServerInterface&nbsp;rpc)
                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
  This version is used by TestTokenAuthentication</div>
@@ -5327,7 +5327,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2824">createMockRegionServerService</a>(org.apache.hadoop.hbase.ServerName&nbsp;name)
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2825">createMockRegionServerService</a>(org.apache.hadoop.hbase.ServerName&nbsp;name)
                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
  This version is used by TestOpenRegionHandler</div>
@@ -5344,7 +5344,7 @@
 <li class="blockList">
 <h4>enableDebug</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2838">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz)</pre>
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2839">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;clazz)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as
              HBase only uses log4j. You should do this by your own as it you know which log
              framework you are using then set the log level to debug is very easy.</span></div>
@@ -5361,7 +5361,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireMasterSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2846">expireMasterSession</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2847">expireMasterSession</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire the Master's session</div>
 <dl>
@@ -5376,7 +5376,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireRegionServerSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2855">expireRegionServerSession</a>(int&nbsp;index)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2856">expireRegionServerSession</a>(int&nbsp;index)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire a region server's session</div>
 <dl>
@@ -5393,7 +5393,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementMinRegionServerCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2861">decrementMinRegionServerCount</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2862">decrementMinRegionServerCount</a>()</pre>
 </li>
 </ul>
 <a name="decrementMinRegionServerCount-org.apache.hadoop.conf.Configuration-">
@@ -5402,7 +5402,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementMinRegionServerCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2872">decrementMinRegionServerCount</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2873">decrementMinRegionServerCount</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="expireSession-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">
@@ -5411,7 +5411,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2881">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;nodeZK)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2882">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;nodeZK)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5425,7 +5425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>expireSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2896">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;nodeZK,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2897">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;nodeZK,
                           boolean&nbsp;checkStatus)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Expire a ZooKeeper session as recommended in ZooKeeper documentation
@@ -5449,7 +5449,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2947">getHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2948">getHBaseCluster</a>()</pre>
 <div class="block">Get the Mini HBase cluster.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -5465,7 +5465,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHBaseClusterInterface</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2959">getHBaseClusterInterface</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2960">getHBaseClusterInterface</a>()</pre>
 <div class="block">Returns the HBaseCluster instance.
  <p>Returned object can be any of the subclasses of HBaseCluster, and the
  tests referring this should not assume that the cluster is a mini cluster or a
@@ -5480,7 +5480,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>invalidateConnection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2974">invalidateConnection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2975">invalidateConnection</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Resets the connections so that the next time getConnection() is called, a new connection is
  created. This is needed in cases where the entire cluster / all the masters are shutdown and
@@ -5501,7 +5501,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2990">getConnection</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2991">getConnection</a>()
                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a shared Connection to the cluster.
  this method is thread safe.</div>
@@ -5519,7 +5519,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3000">getConnection</a>(org.apache.hadoop.hbase.security.User&nbsp;user)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3001">getConnection</a>(org.apache.hadoop.hbase.security.User&nbsp;user)
                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a assigned Connection to the cluster.
  this method is thread safe.</div>
@@ -5539,7 +5539,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.AsyncClusterConnection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3009">getAsyncConnection</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.client.AsyncClusterConnection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3010">getAsyncConnection</a>()
                                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a shared AsyncClusterConnection to the cluster.
  this method is thread safe.</div>
@@ -5557,7 +5557,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.AsyncClusterConnection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3033">getAsyncConnection</a>(org.apache.hadoop.hbase.security.User&nbsp;user)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.AsyncClusterConnection&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3034">getAsyncConnection</a>(org.apache.hadoop.hbase.security.User&nbsp;user)
                                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a assigned AsyncClusterConnection to the cluster.
  this method is thread safe.</div>
@@ -5577,7 +5577,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeConnection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3037">closeConnection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3038">closeConnection</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5591,7 +5591,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Admin&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3052">getAdmin</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Admin&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3053">getAdmin</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns an Admin instance which is shared between HBaseTestingUtility instance users.
  Closing it has no effect, it will be closed automatically when the cluster shutdowns</div>
@@ -5607,7 +5607,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHbck</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Hbck&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3064">getHbck</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Hbck&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3065">getHbck</a>()
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns an <code>Hbck</code> instance. Needs be closed when done.</div>
 <dl>
@@ -5622,7 +5622,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3073">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3074">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Unassign the named region.</div>
 <dl>
@@ -5639,7 +5639,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3082">unassignRegion</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3083">unassignRegion</a>(byte[]&nbsp;regionName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Unassign the named region.</div>
 <dl>
@@ -5656,7 +5656,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegionByRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3092">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;row,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3093">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;row,
                                 org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Closes the region containing the given row.</div>
@@ -5675,7 +5675,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignRegionByRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3103">unassignRegionByRow</a>(byte[]&nbsp;row,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3104">unassignRegionByRow</a>(byte[]&nbsp;row,
                                 org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Closes the region containing the given row.</div>
@@ -5694,7 +5694,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplittableRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3114">getSplittableRegion</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3115">getSplittableRegion</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                         int&nbsp;maxAttempts)</pre>
 <div class="block">Retrieves a splittable region randomly from tableName</div>
 <dl>
@@ -5712,7 +5712,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3146">getDFSCluster</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3147">getDFSCluster</a>()</pre>
 </li>
 </ul>
 <a name="setDFSCluster-org.apache.hadoop.hdfs.MiniDFSCluster-">
@@ -5721,7 +5721,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3150">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3151">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5737,7 +5737,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3162">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3163">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;cluster,
                           boolean&nbsp;requireDown)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5759,7 +5759,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTestFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3171">getTestFileSystem</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3172">getTestFileSystem</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5773,7 +5773,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3182">waitTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3183">waitTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions in a table have been assigned.  Waits default timeout before giving up
@@ -5793,7 +5793,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3187">waitTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3188">waitTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
                                long&nbsp;timeoutMillis)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5810,7 +5810,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3197">waitTableAvailable</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3198">waitTableAvailable</a>(byte[]&nbsp;table,
                                long&nbsp;timeoutMillis)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5831,7 +5831,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>explainTableAvailability</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3202">explainTableAvailability</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3203">explainTableAvailability</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5845,7 +5845,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>explainTableState</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3226">explainTableState</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3227">explainTableState</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
                                 org.apache.hadoop.hbase.client.TableState.State&nbsp;state)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5861,7 +5861,7 @@
 <li class="blockList">
 <h4>findLastTableState</h4>
 <pre>@Nullable
-public&nbsp;org.apache.hadoop.hbase.client.TableState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3240">findLastTableState</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
+public&nbsp;org.apache.hadoop.hbase.client.TableState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3241">findLastTableState</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
                                                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5875,7 +5875,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3268">waitTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3269">waitTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the
@@ -5896,7 +5896,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3282">waitTableEnabled</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3283">waitTableEnabled</a>(byte[]&nbsp;table,
                              long&nbsp;timeoutMillis)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5920,7 +5920,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3287">waitTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3288">waitTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
                              long&nbsp;timeoutMillis)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5935,7 +5935,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3299">waitTableDisabled</a>(byte[]&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3300">waitTableDisabled</a>(byte[]&nbsp;table)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'
@@ -5955,7 +5955,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3304">waitTableDisabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3305">waitTableDisabled</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
                               long&nbsp;millisTimeout)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5972,7 +5972,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitTableDisabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3316">waitTableDisabled</a>(byte[]&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3317">waitTableDisabled</a>(byte[]&nbsp;table,
                               long&nbsp;timeoutMillis)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5993,7 +5993,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSomeRegionServersAvailable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3328">ensureSomeRegionServersAvailable</a>(int&nbsp;num)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3329">ensureSomeRegionServersAvailable</a>(int&nbsp;num)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure that at least the specified number of region servers
  are running</div>
@@ -6013,7 +6013,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureSomeNonStoppedRegionServersAvailable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3349">ensureSomeNonStoppedRegionServersAvailable</a>(int&nbsp;num)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3350">ensureSomeNonStoppedRegionServersAvailable</a>(int&nbsp;num)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure that at least the specified number of region servers
  are running. We don't count the ones that are currently stopping or are
@@ -6034,7 +6034,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDifferentUser</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.security.User&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3381">getDifferentUser</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;org.apache.hadoop.hbase.security.User&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3382">getDifferentUser</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;differentiatingSuffix)
                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method clones the passed <code>c</code> configuration setting a new
@@ -6057,7 +6057,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllOnlineRegions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3397">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;cluster)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3398">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;cluster)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6071,7 +6071,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxRecoveryErrorCount</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3441">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3442">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
                                             int&nbsp;max)</pre>
 <div class="block">Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and
  makes tests linger.  Here is the exception you'll see:
@@ -6099,7 +6099,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assignRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3467">assignRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;regionInfo)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3468">assignRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;regionInfo)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Uses directly the assignment manager to assign the region. and waits until the specified region
@@ -6119,7 +6119,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>moveRegionAndWait</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3482">moveRegionAndWait</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;destRegion,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3483">moveRegionAndWait</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;destRegion,
                               org.apache.hadoop.hbase.ServerName&nbsp;destServer)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6140,7 +6140,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3507">waitUntilAllRegionsAssigned</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3508">waitUntilAllRegionsAssigned</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions for a table in hbase:meta have a non-empty
  info:server, up to a configuable timeout value (default is 60 seconds)
@@ -6161,7 +6161,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllSystemRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3516">waitUntilAllSystemRegionsAssigned</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3517">waitUntilAllSystemRegionsAssigned</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waith until all system table's regions get assigned</div>
 <dl>
@@ -6176,7 +6176,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilAllRegionsAssigned</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3529">waitUntilAllRegionsAssigned</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3530">waitUntilAllRegionsAssigned</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                         long&nbsp;timeout)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until all regions for a table in hbase:meta have a non-empty
@@ -6198,7 +6198,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFromStoreFile</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3611">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3612">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
                                                                   org.apache.hadoop.hbase.client.Get&nbsp;get)
                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do a small get/scan against one store. This is required because store
@@ -6215,7 +6215,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitStartKeys</h4>
-<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3641">getRegionSplitStartKeys</a>(byte[]&nbsp;startKey,
+<pre>public&nbsp;byte[][]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3642">getRegionSplitStartKeys</a>(byte[]&nbsp;startKey,
                                         byte[]&nbsp;endKey,
                                         int&nbsp;numRegions)</pre>
 <div class="block">Create region split keys between startkey and endKey</div>
@@ -6235,7 +6235,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFromStoreFile</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3654">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3655">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
                                                                   byte[]&nbsp;row,
                                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns)
                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6253,7 +6253,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertKVListsEqual</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3665">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;additionalMsg,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3666">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;additionalMsg,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.Cell&gt;&nbsp;expected,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends org.apache.hadoop.hbase.Cell&gt;&nbsp;actual)</pre>
 </li>
@@ -6264,7 +6264,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>safeGetAsStr</h4>
-<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3692">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&nbsp;lst,
+<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3693">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&nbsp;lst,
                                       int&nbsp;i)</pre>
 </li>
 </ul>
@@ -6274,7 +6274,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterKey</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3700">getClusterKey</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3701">getClusterKey</a>()</pre>
 </li>
 </ul>
 <a name="createRandomTable-org.apache.hadoop.hbase.TableName-java.util.Collection-int-int-int-int-int-">
@@ -6283,7 +6283,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRandomTable</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3708">createRandomTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3709">createRandomTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;families,
                                                               int&nbsp;maxVersions,
                                                               int&nbsp;numColsPerRow,
@@ -6306,7 +6306,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>randomFreePort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3792">randomFreePort</a>()</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3793">randomFreePort</a>()</pre>
 </li>
 </ul>
 <a name="randomMultiCastAddress--">
@@ -6315,7 +6315,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>randomMultiCastAddress</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3795">randomMultiCastAddress</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3796">randomMultiCastAddress</a>()</pre>
 </li>
 </ul>
 <a name="waitForHostPort-java.lang.String-int-">
@@ -6324,7 +6324,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForHostPort</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3799">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3800">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host,
                                    int&nbsp;port)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6339,7 +6339,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3830">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3831">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                               byte[]&nbsp;columnFamily,
                                               org.apache.hadoop.hbase.io.compress.Compression.Algorithm&nbsp;compression,
@@ -6361,7 +6361,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3842">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3843">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                               byte[]&nbsp;columnFamily,
                                               org.apache.hadoop.hbase.io.compress.Compression.Algorithm&nbsp;compression,
@@ -6386,7 +6386,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3861">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3862">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                               byte[][]&nbsp;columnFamilies,
                                               org.apache.hadoop.hbase.io.compress.Compression.Algorithm&nbsp;compression,
@@ -6411,7 +6411,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3883">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3884">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
                                               org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&nbsp;hcd)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6431,7 +6431,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3893">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3894">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
                                               org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&nbsp;hcd,
                                               int&nbsp;numRegionsPerServer)
@@ -6452,7 +6452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3904">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3905">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;desc,
                                               org.apache.hadoop.hbase.client.ColumnFamilyDescriptor[]&nbsp;hcds,
                                               int&nbsp;numRegionsPerServer)
@@ -6473,7 +6473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createPreSplitLoadTestTable</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3916">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3917">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.hbase.client.TableDescriptor&nbsp;td,
                                               org.apache.hadoop.hbase.client.ColumnFamilyDescriptor[]&nbsp;cds,
                                               org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm&nbsp;splitter,
@@ -6495,7 +6495,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRSPort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3961">getMetaRSPort</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3962">getMetaRSPort</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6509,7 +6509,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionOnServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3973">assertRegionOnServer</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3974">assertRegionOnServer</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri,
                                  org.apache.hadoop.hbase.ServerName&nbsp;server,
                                  long&nbsp;timeout)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -6531,7 +6531,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionOnlyOnServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3992">assertRegionOnlyOnServer</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3993">assertRegionOnlyOnServer</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri,
                                      org.apache.hadoop.hbase.ServerName&nbsp;server,
                                      long&nbsp;timeout)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -6551,7 +6551,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4022">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4023">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                                                      org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&nbsp;cd)
                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6566,7 +6566,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4029">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4030">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                                                      org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&nbsp;cd,
                                                                      org.apache.hadoop.hbase.io.hfile.BlockCache&nbsp;blockCache)
                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6582,7 +6582,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setFileSystemURI</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4037">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fsURI)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4038">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fsURI)</pre>
 </li>
 </ul>
 <a name="predicateNoRegionsInTransition--">
@@ -6591,7 +6591,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateNoRegionsInTransition</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.ExplainingPredicate.html" title="interface in org.apache.hadoop.hbase">Waiter.ExplainingPredicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4044">predicateNoRegionsInTransition</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.ExplainingPredicate.html" title="interface in org.apache.hadoop.hbase">Waiter.ExplainingPredicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4045">predicateNoRegionsInTransition</a>()</pre>
 <div class="block">Returns a <a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that there are no regions in transition in master</div>
 </li>
 </ul>
@@ -6601,7 +6601,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableEnabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4067">predicateTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4068">predicateTableEnabled</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6611,7 +6611,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableDisabled</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4084">predicateTableDisabled</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4085">predicateTableDisabled</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6621,7 +6621,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>predicateTableAvailable</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4101">predicateTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase">Waiter.Predicate</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4102">predicateTableAvailable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
 <div class="block">Returns a <a href="../../../../org/apache/hadoop/hbase/Waiter.Predicate.html" title="interface in org.apache.hadoop.hbase"><code>Waiter.Predicate</code></a> for checking that table is enabled</div>
 </li>
 </ul>
@@ -6631,7 +6631,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilNoRegionsInTransition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4138">waitUntilNoRegionsInTransition</a>(long&nbsp;timeout)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4139">waitUntilNoRegionsInTransition</a>(long&nbsp;timeout)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until no regions in transition.</div>
 <dl>
@@ -6648,7 +6648,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilNoRegionsInTransition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4146">waitUntilNoRegionsInTransition</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4147">waitUntilNoRegionsInTransition</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait until no regions in transition. (time limit 15min)</div>
 <dl>
@@ -6663,7 +6663,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitLabelAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4155">waitLabelAvailable</a>(long&nbsp;timeoutMillis,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4156">waitLabelAvailable</a>(long&nbsp;timeoutMillis,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;labels)</pre>
 <div class="block">Wait until labels is ready in VisibilityLabelsCache.</div>
 <dl>
@@ -6679,7 +6679,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>generateColumnDescriptors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4186">generateColumnDescriptors</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4187">generateColumnDescriptors</a>()</pre>
 <div class="block">Create a set of column descriptors with the combination of compression,
  encoding, bloom codecs available.</div>
 <dl>
@@ -6694,7 +6694,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>generateColumnDescriptors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4196">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.ColumnFamilyDescriptor&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4197">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)</pre>
 <div class="block">Create a set of column descriptors with the combination of compression,
  encoding, bloom codecs available.</div>
 <dl>
@@ -6711,7 +6711,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSupportedCompressionAlgorithms</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.io.compress.Compression.Algorithm[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4220">getSupportedCompressionAlgorithms</a>()</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.io.compress.Compression.Algorithm[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4221">getSupportedCompressionAlgorithms</a>()</pre>
 <div class="block">Get supported compression algorithms.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -6725,7 +6725,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getClosestRowBefore</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Result&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4235">getClosestRowBefore</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r,
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Result&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4236">getClosestRowBefore</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r,
                                                                  byte[]&nbsp;row,
                                                                  byte[]&nbsp;family)
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6741,7 +6741,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isTargetTable</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4251">isTargetTable</a>(byte[]&nbsp;inRow,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4252">isTargetTable</a>(byte[]&nbsp;inRow,
                               org.apache.hadoop.hbase.Cell&nbsp;c)</pre>
 </li>
 </ul>
@@ -6751,7 +6751,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMiniKdc</h4>
-<pre>public&nbsp;org.apache.hadoop.minikdc.MiniKdc&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4267">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;keytabFile)
+<pre>public&nbsp;org.apache.hadoop.minikdc.MiniKdc&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4268">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;keytabFile)
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Sets up <code>MiniKdc</code> for testing security.
  Uses <a href="../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security"><code>HBaseKerberosUtils</code></a> to set the given keytab file as
@@ -6771,7 +6771,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumHFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4297">getNumHFiles</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4298">getNumHFiles</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                         byte[]&nbsp;family)</pre>
 </li>
 </ul>
@@ -6781,7 +6781,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumHFilesForRS</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4306">getNumHFilesForRS</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4307">getNumHFilesForRS</a>(org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs,
                              org.apache.hadoop.hbase.TableName&nbsp;tableName,
                              byte[]&nbsp;family)</pre>
 </li>
@@ -6792,7 +6792,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyTableDescriptorIgnoreTableName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4315">verifyTableDescriptorIgnoreTableName</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;ltd,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4316">verifyTableDescriptorIgnoreTableName</a>(org.apache.hadoop.hbase.client.TableDescriptor&nbsp;ltd,
                                                  org.apache.hadoop.hbase.client.TableDescriptor&nbsp;rtd)</pre>
 </li>
 </ul>
@@ -6802,7 +6802,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>await</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4331">await</a>(long&nbsp;sleepMillis,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4332">await</a>(long&nbsp;sleepMillis,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BooleanSupplier.html?is-external=true" title="class or interface in java.util.function">BooleanSupplier</a>&nbsp;condition)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Await the successful return of <code>condition</code>, sleeping <code>sleepMillis</code> between
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 33cfe45..15911cd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -1219,115 +1219,115 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestFromClientSide4.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide4.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestPreadReversedScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestFromClientSide4.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide4.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMobRestoreSnapshotFromClientSimple.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientSimple.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFromClientSide5.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide5.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncSingleRequestRpcRetryingCaller.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestResultScannerCursor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultScannerCursor.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMetaReplicasAddressChange.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaReplicasAddressChange.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiRespectsLimits.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableBatchRetryImmediately.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableBatchRetryImmediately.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncClusterAdminApi.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncAdminWithRegionReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncAdminWithRegionReplicas.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestClientOperationInterrupt.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestClientOperationInterrupt.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIntraRowPagination.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableScannerCloseWhileSuspending.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableScannerCloseWhileSuspending.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMobCloneSnapshotFromClientCloneLinksAfterDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClientCloneLinksAfterDelete.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableRegionReplicasScan.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableRegionReplicasScan.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiActionMetricsFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiActionMetricsFromClient.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAdmin2.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMobRestoreSnapshotFromClientSchemaChange.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientSchemaChange.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncDecommissionAdminApi.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncDecommissionAdminApi.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestGetProcedureResult.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestGetProcedureResult.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncQuotaAdminApi.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestTableOperationException.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestTableOperationException.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAllowPartialScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAllowPartialScanResultCache.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestInvalidMutationDurabilityException.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestInvalidMutationDurabilityException.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMvccConsistentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableAdminApi2.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableAdminApi2.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterRegistry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMasterRegistry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSmallReversedScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterRegistry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMasterRegistry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 8ed363b..6a50ca8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -729,51 +729,51 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAsyncSingleRequestRpcRetryingCaller.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestPreadReversedScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestAsyncSingleRequestRpcRetryingCaller.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAdminBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdminBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiRespectsLimits.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractTestAsyncTableScan.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIntraRowPagination.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableScannerCloseWhileSuspending.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableScannerCloseWhileSuspending.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiActionMetricsFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiActionMetricsFromClient.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaWithReplicasTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/MetaWithReplicasTestBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotWithAclTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/SnapshotWithAclTestBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RestoreSnapshotFromClientTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RestoreSnapshotFromClientTestBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterRegistry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMasterRegistry.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSmallReversedScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterRegistry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMasterRegistry.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide5.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide5.html
index fe3da8e..0c882cb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide5.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide5.html
@@ -118,7 +118,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.113">TestFromClientSide5</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.114">TestFromClientSide5</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/FromClientSideBase.html" title="class in org.apache.hadoop.hbase.client">FromClientSideBase</a></pre>
 <div class="block">Run tests that use the HBase clients; <code>Table</code>.
  Sets up the HBase mini cluster once at start and runs through all client tests.
@@ -226,8 +226,8 @@
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide5.html#reverseScanTest-org.apache.hadoop.hbase.client.Table-boolean-">reverseScanTest</a></span>(org.apache.hadoop.hbase.client.Table&nbsp;table,
-               boolean&nbsp;small)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide5.html#reverseScanTest-org.apache.hadoop.hbase.client.Table-org.apache.hadoop.hbase.client.Scan.ReadType-">reverseScanTest</a></span>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+               org.apache.hadoop.hbase.client.Scan.ReadType&nbsp;readType)</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>static void</code></td>
@@ -489,7 +489,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.114">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.115">LOG</a></pre>
 </li>
 </ul>
 <a name="CLASS_RULE">
@@ -498,7 +498,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.117">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.118">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -507,7 +507,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.120">name</a></pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.121">name</a></pre>
 </li>
 </ul>
 </li>
@@ -524,7 +524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TestFromClientSide5</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.123">TestFromClientSide5</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.124">TestFromClientSide5</a>()</pre>
 </li>
 </ul>
 <a name="TestFromClientSide5-java.lang.Class-int-">
@@ -533,7 +533,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestFromClientSide5</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.125">TestFromClientSide5</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;registry,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.126">TestFromClientSide5</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;registry,
                            int&nbsp;numHedgedReqs)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -556,7 +556,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parameters</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.130">parameters</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.131">parameters</a>()</pre>
 </li>
 </ul>
 <a name="tearDownAfterClass--">
@@ -565,7 +565,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.138">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.139">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -579,7 +579,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetClosestRowBefore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.143">testGetClosestRowBefore</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.144">testGetClosestRowBefore</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -595,7 +595,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReverseScanResult</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Result&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.238">getReverseScanResult</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Result&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.239">getReverseScanResult</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                                                    byte[]&nbsp;row)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -610,7 +610,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanVariableReuse</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.253">testScanVariableReuse</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.254">testScanVariableReuse</a>()</pre>
 <div class="block">For HBASE-2156</div>
 </li>
 </ul>
@@ -620,7 +620,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.268">testMultiRowMutation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.269">testMultiRowMutation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -634,7 +634,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithSingleConditionWhenConditionMatches</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.326">testMultiRowMutationWithSingleConditionWhenConditionMatches</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.327">testMultiRowMutationWithSingleConditionWhenConditionMatches</a>()
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -648,7 +648,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithSingleConditionWhenConditionNotMatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.372">testMultiRowMutationWithSingleConditionWhenConditionNotMatch</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.373">testMultiRowMutationWithSingleConditionWhenConditionNotMatch</a>()
                                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -662,7 +662,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithMultipleConditionsWhenConditionsMatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.418">testMultiRowMutationWithMultipleConditionsWhenConditionsMatch</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.419">testMultiRowMutationWithMultipleConditionsWhenConditionsMatch</a>()
                                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -676,7 +676,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithMultipleConditionsWhenConditionsNotMatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.466">testMultiRowMutationWithMultipleConditionsWhenConditionsNotMatch</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.467">testMultiRowMutationWithMultipleConditionsWhenConditionsNotMatch</a>()
                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -690,7 +690,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithFilterConditionWhenConditionMatches</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.514">testMultiRowMutationWithFilterConditionWhenConditionMatches</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.515">testMultiRowMutationWithFilterConditionWhenConditionMatches</a>()
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -704,7 +704,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiRowMutationWithFilterConditionWhenConditionNotMatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.564">testMultiRowMutationWithFilterConditionWhenConditionNotMatch</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.565">testMultiRowMutationWithFilterConditionWhenConditionNotMatch</a>()
                                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -718,7 +718,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testRowMutations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.614">testRowMutations</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.615">testRowMutations</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -732,7 +732,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchAppendWithReturnResultFalse</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.693">testBatchAppendWithReturnResultFalse</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.694">testBatchAppendWithReturnResultFalse</a>()
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -746,7 +746,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testAppend</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.717">testAppend</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.718">testAppend</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -760,7 +760,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>doAppend</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.745">doAppend</a>(boolean&nbsp;walUsed)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.746">doAppend</a>(boolean&nbsp;walUsed)
                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -774,7 +774,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testAppendWithoutWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.789">testAppendWithoutWAL</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.790">testAppendWithoutWAL</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -788,7 +788,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testClientPoolRoundRobin</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.810">testClientPoolRoundRobin</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.811">testClientPoolRoundRobin</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -802,7 +802,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testClientPoolThreadLocal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.848">testClientPoolThreadLocal</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.849">testClientPoolThreadLocal</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -816,7 +816,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckAndPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.928">testCheckAndPut</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.929">testCheckAndPut</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -830,7 +830,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckAndMutateWithTimeRange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.969">testCheckAndMutateWithTimeRange</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.970">testCheckAndMutateWithTimeRange</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -844,7 +844,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckAndPutWithCompareOp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1060">testCheckAndPutWithCompareOp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1061">testCheckAndPutWithCompareOp</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -858,7 +858,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckAndDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1145">testCheckAndDelete</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1146">testCheckAndDelete</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -872,7 +872,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckAndDeleteWithCompareOp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1165">testCheckAndDeleteWithCompareOp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1166">testCheckAndDeleteWithCompareOp</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -886,7 +886,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanMetrics</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1262">testScanMetrics</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1263">testScanMetrics</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test ScanMetrics</div>
 <dl>
@@ -901,7 +901,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCacheOnWriteEvictOnClose</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1393">testCacheOnWriteEvictOnClose</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1394">testCacheOnWriteEvictOnClose</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests that cache on write works all the way up from the client-side.
 
@@ -919,7 +919,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForStoreFileCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1503">waitForStoreFileCount</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1504">waitForStoreFileCount</a>(org.apache.hadoop.hbase.regionserver.HStore&nbsp;store,
                                    int&nbsp;count,
                                    int&nbsp;timeout)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -935,7 +935,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testNonCachedGetRegionLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1519">testNonCachedGetRegionLocation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1520">testNonCachedGetRegionLocation</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests the non cached version of getRegionLocator by moving a region.</div>
 <dl>
@@ -950,7 +950,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetRegionsInRange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1578">testGetRegionsInRange</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1579">testGetRegionsInRange</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests getRegionsInRange by creating some regions over which a range of
  keys spans; then changing the key range.</div>
@@ -966,7 +966,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInRange</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionLocation&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1635">getRegionsInRange</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionLocation&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1636">getRegionsInRange</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                         byte[]&nbsp;startKey,
                                                                         byte[]&nbsp;endKey)
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -982,7 +982,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testJira6912</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1652">testJira6912</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1653">testJira6912</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -996,7 +996,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScan_NullQualifier</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1681">testScan_NullQualifier</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1682">testScan_NullQualifier</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1010,7 +1010,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testNegativeTimestamp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1711">testNegativeTimestamp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1712">testNegativeTimestamp</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1024,7 +1024,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testRawScanRespectsVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1772">testRawScanRespectsVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1773">testRawScanRespectsVersions</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1038,7 +1038,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testEmptyFilterList</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1845">testEmptyFilterList</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1846">testEmptyFilterList</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1052,7 +1052,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSmallScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1885">testSmallScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1886">testSmallScan</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1066,7 +1066,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSuperSimpleWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1925">testSuperSimpleWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1926">testSuperSimpleWithReverseScan</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1080,7 +1080,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testFiltersWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1970">testFiltersWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.1971">testFiltersWithReverseScan</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1094,7 +1094,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testKeyOnlyFilterWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2013">testKeyOnlyFilterWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2014">testKeyOnlyFilterWithReverseScan</a>()
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1108,7 +1108,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSimpleMissingWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2054">testSimpleMissingWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2055">testSimpleMissingWithReverseScan</a>()
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test simple table and non-existent row cases.</div>
 <dl>
@@ -1123,7 +1123,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testNullWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2119">testNullWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2120">testNullWithReverseScan</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1137,7 +1137,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeletesWithReverseScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2159">testDeletesWithReverseScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2160">testDeletesWithReverseScan</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1151,7 +1151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testReversedScanUnderMultiRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2340">testReversedScanUnderMultiRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2341">testReversedScanUnderMultiRegions</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests reversed scan under multi regions</div>
 <dl>
@@ -1166,7 +1166,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSmallReversedScanUnderMultiRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2401">testSmallReversedScanUnderMultiRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2402">testSmallReversedScanUnderMultiRegions</a>()
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests reversed scan under multi regions</div>
 <dl>
@@ -1175,14 +1175,14 @@
 </dl>
 </li>
 </ul>
-<a name="reverseScanTest-org.apache.hadoop.hbase.client.Table-boolean-">
+<a name="reverseScanTest-org.apache.hadoop.hbase.client.Table-org.apache.hadoop.hbase.client.Scan.ReadType-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>reverseScanTest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2441">reverseScanTest</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
-                             boolean&nbsp;small)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2443">reverseScanTest</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+                             org.apache.hadoop.hbase.client.Scan.ReadType&nbsp;readType)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1196,7 +1196,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testFilterAllRecords</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2571">testFilterAllRecords</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2573">testFilterAllRecords</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1210,7 +1210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCellSizeLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2585">testCellSizeLimit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2587">testCellSizeLimit</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1224,7 +1224,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCellSizeNoLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2620">testCellSizeNoLimit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2622">testCellSizeNoLimit</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1238,7 +1238,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteSpecifiedVersionOfSpecifiedColumn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2639">testDeleteSpecifiedVersionOfSpecifiedColumn</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2641">testDeleteSpecifiedVersionOfSpecifiedColumn</a>()
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1252,7 +1252,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteLatestVersionOfSpecifiedColumn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2683">testDeleteLatestVersionOfSpecifiedColumn</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2685">testDeleteLatestVersionOfSpecifiedColumn</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1266,7 +1266,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testReadWithFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2741">testReadWithFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2743">testReadWithFilter</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test for HBASE-17125</div>
 <dl>
@@ -1281,7 +1281,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCellUtilTypeMethods</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2827">testCellUtilTypeMethods</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2829">testCellUtilTypeMethods</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1295,7 +1295,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTableWithZeroRegionReplicas</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2881">testCreateTableWithZeroRegionReplicas</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2883">testCreateTableWithZeroRegionReplicas</a>()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1309,7 +1309,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testModifyTableWithZeroRegionReplicas</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2892">testModifyTableWithZeroRegionReplicas</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2894">testModifyTableWithZeroRegionReplicas</a>()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1323,7 +1323,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testModifyTableWithMemstoreData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2907">testModifyTableWithMemstoreData</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2909">testModifyTableWithMemstoreData</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1337,7 +1337,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteCFWithMemstoreData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2913">testDeleteCFWithMemstoreData</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2915">testDeleteCFWithMemstoreData</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1351,7 +1351,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createTableAndValidateTableSchemaModification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2924">createTableAndValidateTableSchemaModification</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html#line.2926">createTableAndValidateTableSchemaModification</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                            boolean&nbsp;modifyTable)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Create table and validate online schema modification</div>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestImmutableScan.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestImmutableScan.html
index 7506d4c..8d294ca 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestImmutableScan.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestImmutableScan.html
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.49">TestImmutableScan</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.50">TestImmutableScan</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Small tests for ImmutableScan</div>
 </li>
@@ -215,7 +215,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.52">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.53">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -224,7 +224,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.55">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.56">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestImmutableScan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.49">TestImmutableScan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.50">TestImmutableScan</a>()</pre>
 </li>
 </ul>
 </li>
@@ -258,7 +258,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanCopyConstructor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.58">testScanCopyConstructor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html#line.59">testScanCopyConstructor</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestOperation.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestOperation.html
index 31fb242..690daf5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestOperation.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestOperation.html
@@ -50,7 +50,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestOperation.html" target="_top">Frames</a></li>
@@ -1237,7 +1237,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestOperation.html" target="_top">Frames</a></li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html
similarity index 81%
rename from testdevapidocs/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html
rename to testdevapidocs/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html
index 15bd445..c124221 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestSmallReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)</title>
+<title>TestPreadReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestSmallReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)";
+            parent.document.title="TestPreadReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)";
         }
     }
     catch(err) {
@@ -40,7 +40,7 @@
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestSmallReversedScanner.html">Use</a></li>
+<li><a href="class-use/TestPreadReversedScanner.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -49,12 +49,12 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" target="_top">Frames</a></li>
-<li><a href="TestSmallReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" target="_top">Frames</a></li>
+<li><a href="TestPreadReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -93,14 +93,14 @@
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">org.apache.hadoop.hbase.client</div>
-<h2 title="Class TestSmallReversedScanner" class="title">Class TestSmallReversedScanner</h2>
+<h2 title="Class TestPreadReversedScanner" class="title">Class TestPreadReversedScanner</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
 <li>
 <ul class="inheritance">
-<li>org.apache.hadoop.hbase.client.TestSmallReversedScanner</li>
+<li>org.apache.hadoop.hbase.client.TestPreadReversedScanner</li>
 </ul>
 </li>
 </ul>
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.37">TestSmallReversedScanner</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.38">TestPreadReversedScanner</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -131,27 +131,27 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.client.Table</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#htable">htable</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#htable">htable</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#LOG">LOG</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TABLE_NAME">TABLE_NAME</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TABLE_NAME">TABLE_NAME</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -168,7 +168,7 @@
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TestSmallReversedScanner--">TestSmallReversedScanner</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#TestPreadReversedScanner--">TestPreadReversedScanner</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -187,32 +187,34 @@
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScan01--">testSmallReversedScan01</a></span>()</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testPreadReversedScan01--">testPreadReversedScan01</a></span>()</code>
 <div class="block">all rowKeys are fit in the last region.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScan02--">testSmallReversedScan02</a></span>()</code>
-<div class="block">Corner case:
-  HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in region (-oo,b) .</div>
-</td>
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testPreadReversedScanInternal-java.lang.String:A-">testPreadReversedScanInternal</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;inputRowKeys)</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#testSmallReversedScanInternal-java.lang.String:A-">testSmallReversedScanInternal</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;inputRowKeys)</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#testSmallReversedScan02--">testSmallReversedScan02</a></span>()</code>
+<div class="block">Corner case:
+ <p/>
+ HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in
+ region (-oo,b) .</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -242,7 +244,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.40">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.41">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -251,7 +253,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>public static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.43">LOG</a></pre>
+<pre>public static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.44">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -260,7 +262,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.44">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.45">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="TABLE_NAME">
@@ -269,7 +271,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE_NAME</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.46">TABLE_NAME</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.47">TABLE_NAME</a></pre>
 </li>
 </ul>
 <a name="COLUMN_FAMILY">
@@ -278,7 +280,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMN_FAMILY</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.47">COLUMN_FAMILY</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.48">COLUMN_FAMILY</a></pre>
 </li>
 </ul>
 <a name="htable">
@@ -287,7 +289,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>htable</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.49">htable</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.50">htable</a></pre>
 </li>
 </ul>
 </li>
@@ -298,13 +300,13 @@
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="TestSmallReversedScanner--">
+<a name="TestPreadReversedScanner--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>TestSmallReversedScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.37">TestSmallReversedScanner</a>()</pre>
+<h4>TestPreadReversedScanner</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.38">TestPreadReversedScanner</a>()</pre>
 </li>
 </ul>
 </li>
@@ -321,7 +323,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.52">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.53">setUpBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -335,7 +337,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.66">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.67">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -349,7 +351,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.71">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.72">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -357,13 +359,13 @@
 </dl>
 </li>
 </ul>
-<a name="testSmallReversedScan01--">
+<a name="testPreadReversedScan01--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>testSmallReversedScan01</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.80">testSmallReversedScan01</a>()
+<h4>testPreadReversedScan01</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.80">testPreadReversedScan01</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">all rowKeys are fit in the last region.</div>
 <dl>
@@ -372,13 +374,13 @@
 </dl>
 </li>
 </ul>
-<a name="testSmallReversedScanInternal-java.lang.String:A-">
+<a name="testPreadReversedScanInternal-java.lang.String:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>testSmallReversedScanInternal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.93">testSmallReversedScanInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;inputRowKeys)
+<h4>testPreadReversedScanInternal</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.93">testPreadReversedScanInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;inputRowKeys)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -392,11 +394,13 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testSmallReversedScan02</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#line.124">testSmallReversedScan02</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html#line.125">testSmallReversedScan02</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Corner case:
-  HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in region (-oo,b) .
-  test whether reversed small scanner will return infinity results with RowKey={0x00}.</div>
+ <p/>
+ HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in
+ region (-oo,b) . test whether reversed pread scanner will return infinity results with
+ RowKey={0x00}.</div>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -422,7 +426,7 @@
 <li><a href="../../../../../overview-summary.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestSmallReversedScanner.html">Use</a></li>
+<li><a href="class-use/TestPreadReversedScanner.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
 <li><a href="../../../../../index-all.html">Index</a></li>
@@ -431,12 +435,12 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" target="_top">Frames</a></li>
-<li><a href="TestSmallReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" target="_top">Frames</a></li>
+<li><a href="TestPreadReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html
index 0e9a2eb..1622c40 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html
@@ -49,7 +49,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -401,7 +401,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
index 4ac7551..f28572b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.48">TestScan</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.47">TestScan</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -225,7 +225,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.50">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.49">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -242,7 +242,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScan</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.48">TestScan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.47">TestScan</a>()</pre>
 </li>
 </ul>
 </li>
@@ -259,7 +259,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testAttributesSerialization</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.54">testAttributesSerialization</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.53">testAttributesSerialization</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -273,7 +273,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetToScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.72">testGetToScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.71">testGetToScan</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -287,7 +287,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanAttributes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.116">testScanAttributes</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.115">testScanAttributes</a>()</pre>
 </li>
 </ul>
 <a name="testNullQualifier--">
@@ -296,7 +296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testNullQualifier</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.166">testNullQualifier</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.165">testNullQualifier</a>()</pre>
 </li>
 </ul>
 <a name="testSetAuthorizations--">
@@ -305,7 +305,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSetAuthorizations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.175">testSetAuthorizations</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.174">testSetAuthorizations</a>()</pre>
 </li>
 </ul>
 <a name="testSetStartRowAndSetStopRow--">
@@ -314,7 +314,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSetStartRowAndSetStopRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.196">testSetStartRowAndSetStopRow</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.195">testSetStartRowAndSetStopRow</a>()</pre>
 </li>
 </ul>
 <a name="testScanCopyConstructor--">
@@ -323,7 +323,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanCopyConstructor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.222">testScanCopyConstructor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.221">testScanCopyConstructor</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -337,7 +337,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testScanReadType</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.298">testScanReadType</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScan.html#line.296">testScanReadType</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
index 99ddf92..656826c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
@@ -123,7 +123,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.921">TestScannersFromClientSide.LimitKVsReturnFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.922">TestScannersFromClientSide.LimitKVsReturnFilter</a>
 extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 </li>
 </ul>
@@ -259,7 +259,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cellCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.923">cellCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.924">cellCount</a></pre>
 </li>
 </ul>
 </li>
@@ -276,7 +276,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LimitKVsReturnFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.921">LimitKVsReturnFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.922">LimitKVsReturnFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -293,7 +293,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>filterCell</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.filter.Filter.ReturnCode&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.926">filterCell</a>(org.apache.hadoop.hbase.Cell&nbsp;v)
+<pre>public&nbsp;org.apache.hadoop.hbase.filter.Filter.ReturnCode&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.927">filterCell</a>(org.apache.hadoop.hbase.Cell&nbsp;v)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -309,7 +309,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>filterAllRemaining</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.936">filterAllRemaining</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.937">filterAllRemaining</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -325,7 +325,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.945">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.946">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></dd>
@@ -338,7 +338,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide.LimitKVsReturnFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.949">parseFrom</a>(byte[]&nbsp;pbBytes)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide.LimitKVsReturnFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html#line.950">parseFrom</a>(byte[]&nbsp;pbBytes)
                                                                  throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
index a8962dc..d111e0e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.81">TestScannersFromClientSide</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.82">TestScannersFromClientSide</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">A client-side test, mostly testing scanners with various parameters. Parameterized on different
  registry implementations.</div>
@@ -350,7 +350,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.84">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.85">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -359,7 +359,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.87">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.88">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -368,7 +368,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.89">TEST_UTIL</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.90">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="ROW">
@@ -377,7 +377,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ROW</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.90">ROW</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.91">ROW</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -386,7 +386,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.91">FAMILY</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.92">FAMILY</a></pre>
 </li>
 </ul>
 <a name="QUALIFIER">
@@ -395,7 +395,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.92">QUALIFIER</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.93">QUALIFIER</a></pre>
 </li>
 </ul>
 <a name="VALUE">
@@ -404,7 +404,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>VALUE</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.93">VALUE</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.94">VALUE</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -413,7 +413,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.96">name</a></pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.97">name</a></pre>
 </li>
 </ul>
 </li>
@@ -430,7 +430,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestScannersFromClientSide</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.139">TestScannersFromClientSide</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;registryImpl,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.140">TestScannersFromClientSide</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;registryImpl,
                                   int&nbsp;numHedgedReqs)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -453,7 +453,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.99">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.100">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -467,7 +467,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>parameters</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.106">parameters</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.107">parameters</a>()</pre>
 </li>
 </ul>
 <a name="isSameParameterizedCluster-java.lang.Class-int-">
@@ -476,7 +476,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isSameParameterizedCluster</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.125">isSameParameterizedCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;registryImpl,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.126">isSameParameterizedCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;registryImpl,
                                                   int&nbsp;numHedgedReqs)</pre>
 <div class="block">JUnit does not provide an easy way to run a hook after each parameterized run. Without that
  there is no easy way to restart the test cluster after each parameterized run. Annotation
@@ -495,7 +495,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanBatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.164">testScanBatch</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.165">testScanBatch</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test from client side for batch of scan</div>
 <dl>
@@ -510,7 +510,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testMaxResultSizeIsSetToDefault</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.234">testMaxResultSizeIsSetToDefault</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.235">testMaxResultSizeIsSetToDefault</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -524,7 +524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScannerForNotExistingTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.285">testScannerForNotExistingTable</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.286">testScannerForNotExistingTable</a>()</pre>
 <div class="block">Scan on not existing table should throw the exception with correct message</div>
 </li>
 </ul>
@@ -534,7 +534,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSmallScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.303">testSmallScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.304">testSmallScan</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -548,7 +548,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSmallScan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.337">testSmallScan</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.338">testSmallScan</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                            boolean&nbsp;reversed,
                            int&nbsp;rows,
                            int&nbsp;columns)
@@ -566,7 +566,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyExpectedCounts</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.356">verifyExpectedCounts</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.357">verifyExpectedCounts</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                   org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                   int&nbsp;expectedRowCount,
                                   int&nbsp;expectedCellCount)
@@ -583,7 +583,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetMaxResults</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.379">testGetMaxResults</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.380">testGetMaxResults</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test from client side for get with maxResultPerCF set</div>
 <dl>
@@ -598,7 +598,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanMaxResults</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.497">testScanMaxResults</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.498">testScanMaxResults</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test from client side for scan with maxResultPerCF set</div>
 <dl>
@@ -613,7 +613,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetRowOffset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.545">testGetRowOffset</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.546">testGetRowOffset</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test from client side for get with rowOffset</div>
 <dl>
@@ -628,7 +628,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanRawDeleteFamilyVersion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.637">testScanRawDeleteFamilyVersion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.638">testScanRawDeleteFamilyVersion</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -642,7 +642,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanOnReopenedRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.665">testScanOnReopenedRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.666">testScanOnReopenedRegion</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test from client side for scan while the region is reopened
  on the same region server.</div>
@@ -658,7 +658,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyResult</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.735">verifyResult</a>(org.apache.hadoop.hbase.client.Result&nbsp;result,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.736">verifyResult</a>(org.apache.hadoop.hbase.client.Result&nbsp;result,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;expKvList,
                          boolean&nbsp;toLog,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
@@ -670,7 +670,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testReadExpiredDataForRawScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.763">testReadExpiredDataForRawScan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.764">testReadExpiredDataForRawScan</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -684,7 +684,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanWithColumnsAndFilterAndVersion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.783">testScanWithColumnsAndFilterAndVersion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.784">testScanWithColumnsAndFilterAndVersion</a>()
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -698,7 +698,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanWithSameStartRowStopRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.806">testScanWithSameStartRowStopRow</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.807">testScanWithSameStartRowStopRow</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -712,7 +712,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testReverseScanWithFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.843">testReverseScanWithFlush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.844">testReverseScanWithFlush</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -726,7 +726,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testScannerWithPartialResults</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.885">testScannerWithPartialResults</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#line.886">testScannerWithPartialResults</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestSizeFailures.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestSizeFailures.html
index e1e060d..3ccaca5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestSizeFailures.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestSizeFailures.html
@@ -50,7 +50,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestSizeFailures.html" target="_top">Frames</a></li>
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.42">TestSizeFailures</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.43">TestSizeFailures</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -247,7 +247,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.45">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.46">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -256,7 +256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.48">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.49">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -265,7 +265,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>protected static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.49">TEST_UTIL</a></pre>
+<pre>protected static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.50">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -274,7 +274,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.50">FAMILY</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.51">FAMILY</a></pre>
 </li>
 </ul>
 <a name="SLAVES">
@@ -283,7 +283,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLAVES</h4>
-<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.51">SLAVES</a></pre>
+<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.52">SLAVES</a></pre>
 </li>
 </ul>
 <a name="TABLENAME">
@@ -292,7 +292,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLENAME</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.52">TABLENAME</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.53">TABLENAME</a></pre>
 </li>
 </ul>
 <a name="NUM_ROWS">
@@ -301,7 +301,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_ROWS</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.53">NUM_ROWS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.54">NUM_ROWS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TestSizeFailures.NUM_ROWS">Constant Field Values</a></dd>
@@ -314,7 +314,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NUM_COLS</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.53">NUM_COLS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.54">NUM_COLS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TestSizeFailures.NUM_COLS">Constant Field Values</a></dd>
@@ -335,7 +335,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestSizeFailures</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.42">TestSizeFailures</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.43">TestSizeFailures</a>()</pre>
 </li>
 </ul>
 </li>
@@ -352,7 +352,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.56">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.57">setUpBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -366,7 +366,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.106">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.107">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -380,7 +380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testScannerSeesAllRecords</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.114">testScannerSeesAllRecords</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.115">testScannerSeesAllRecords</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Basic client side validation of HBASE-13262</div>
 <dl>
@@ -395,7 +395,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSmallScannerSeesAllRecords</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.136">testSmallScannerSeesAllRecords</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.137">testSmallScannerSeesAllRecords</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Basic client side validation of HBASE-13262</div>
 <dl>
@@ -410,7 +410,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sumTable</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.162">sumTable</a>(org.apache.hadoop.hbase.client.ResultScanner&nbsp;scanner)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html#line.163">sumTable</a>(org.apache.hadoop.hbase.client.ResultScanner&nbsp;scanner)</pre>
 <div class="block">Count the number of rows and the number of entries from a scanner</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -449,7 +449,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestSizeFailures.html" target="_top">Frames</a></li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html
index df30b30..70ab42a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html
@@ -49,7 +49,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotDFSTemporaryDirectory.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -927,7 +927,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotDFSTemporaryDirectory.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestSmallReversedScanner.html b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestPreadReversedScanner.html
similarity index 85%
rename from testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestSmallReversedScanner.html
rename to testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestPreadReversedScanner.html
index e91d64d..5f54ecc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestSmallReversedScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestPreadReversedScanner.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.client.TestSmallReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)</title>
+<title>Uses of Class org.apache.hadoop.hbase.client.TestPreadReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.TestSmallReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)";
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.TestPreadReversedScanner (Apache HBase 3.0.0-alpha-1 Test API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">Class</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../../../../../../overview-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/client/class-use/TestSmallReversedScanner.html" target="_top">Frames</a></li>
-<li><a href="TestSmallReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/client/class-use/TestPreadReversedScanner.html" target="_top">Frames</a></li>
+<li><a href="TestPreadReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.client.TestSmallReversedScanner" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.TestSmallReversedScanner</h2>
+<h2 title="Uses of Class org.apache.hadoop.hbase.client.TestPreadReversedScanner" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.TestPreadReversedScanner</h2>
 </div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.client.TestSmallReversedScanner</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.client.TestPreadReversedScanner</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">Class</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../../../../../../overview-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/client/class-use/TestSmallReversedScanner.html" target="_top">Frames</a></li>
-<li><a href="TestSmallReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/client/class-use/TestPreadReversedScanner.html" target="_top">Frames</a></li>
+<li><a href="TestPreadReversedScanner.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
index bf4b818..abaaddd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
@@ -279,6 +279,7 @@
 <li><a href="TestMutationGetCellBuilder.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMutationGetCellBuilder</a></li>
 <li><a href="TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMvccConsistentScanner</a></li>
 <li><a href="TestOperation.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestOperation</a></li>
+<li><a href="TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPreadReversedScanner</a></li>
 <li><a href="TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutDeleteEtcCellIteration</a></li>
 <li><a href="TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutDotHas</a></li>
 <li><a href="TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutWithDelete</a></li>
@@ -333,7 +334,6 @@
 <li><a href="TestShutdownOfMetaReplicaHolder.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestShutdownOfMetaReplicaHolder</a></li>
 <li><a href="TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSimpleRequestController</a></li>
 <li><a href="TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSizeFailures</a></li>
-<li><a href="TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSmallReversedScanner</a></li>
 <li><a href="TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSnapshotCloneIndependence</a></li>
 <li><a href="TestSnapshotDFSTemporaryDirectory.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSnapshotDFSTemporaryDirectory</a></li>
 <li><a href="TestSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSnapshotFromClient</a></li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
index 4c666fe..b249e98 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
@@ -1322,224 +1322,228 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestPreadReversedScanner</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client">TestPutDeleteEtcCellIteration</a></td>
 <td class="colLast">
 <div class="block">Test that I can Iterate Client Actions that hold Cells (Get does not have Cells).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client">TestPutDotHas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client">TestPutWithDelete</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client">TestPutWriteToWal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestQuotasShell.html" title="class in org.apache.hadoop.hbase.client">TestQuotasShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableLimitedScanWithFilter</a></td>
 <td class="colLast">
 <div class="block">With filter we may stop at a middle of row and think that we still have more cells for the
  current row but actually all the remaining cells will be filtered out by the filter.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html" title="class in org.apache.hadoop.hbase.client">TestRegionInfoBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoDisplay.html" title="class in org.apache.hadoop.hbase.client">TestRegionInfoDisplay</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionLocationCaching.html" title="class in org.apache.hadoop.hbase.client">TestRegionLocationCaching</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionLocator.html" title="class in org.apache.hadoop.hbase.client">TestRegionLocator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient</a></td>
 <td class="colLast">
 <div class="block">Tests for region replicas.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicationShell.html" title="class in org.apache.hadoop.hbase.client">TestReplicationShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to slow down the primary meta region scan a bit</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerStoppedCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to simulate region server down exception for Get and Scan</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRequestTooBigException.html" title="class in org.apache.hadoop.hbase.client">TestRequestTooBigException</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientAfterSplittingRegions.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientAfterSplittingRegions</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientAfterTruncate.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientAfterTruncate</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientClone.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientClone</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientGetCompactionState.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientGetCompactionState</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientSchemaChange.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientSchemaChange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientSimple.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientSimple</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResult.html" title="class in org.apache.hadoop.hbase.client">TestResult</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultFromCoprocessor.html" title="class in org.apache.hadoop.hbase.client">TestResultFromCoprocessor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultFromCoprocessor.MyObserver.html" title="class in org.apache.hadoop.hbase.client">TestResultFromCoprocessor.MyObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultScannerCursor.html" title="class in org.apache.hadoop.hbase.client">TestResultScannerCursor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultSizeEstimation.html" title="class in org.apache.hadoop.hbase.client">TestResultSizeEstimation</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultStatsUtil.html" title="class in org.apache.hadoop.hbase.client">TestResultStatsUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">TestRetriesExhaustedWithDetailsException</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRowComparator.html" title="class in org.apache.hadoop.hbase.client">TestRowComparator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRSGroupShell.html" title="class in org.apache.hadoop.hbase.client">TestRSGroupShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client">TestScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide</a></td>
 <td class="colLast">
 <div class="block">A client-side test, mostly testing scanners with various parameters.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide.LimitKVsReturnFilter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide2.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide2</a></td>
 <td class="colLast">
 <div class="block">Testcase for newly added feature in HBASE-17143, such as startRow and stopRow
  inclusive/exclusive, limit for rows, etc.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannerTimeout.html" title="class in org.apache.hadoop.hbase.client">TestScannerTimeout</a></td>
 <td class="colLast">
 <div class="block">Test various scanner timeout issues.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.html" title="class in org.apache.hadoop.hbase.client">TestScanWithoutFetchingData</a></td>
 <td class="colLast">
 <div class="block">Testcase to make sure that we do not close scanners if ScanRequest.numberOfRows is zero.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSeparateClientZKCluster.html" title="class in org.apache.hadoop.hbase.client">TestSeparateClientZKCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException</a></td>
 <td class="colLast">
 <div class="block">This class is for testing HBaseConnectionManager ServerBusyException.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.SleepCoprocessor.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException.SleepCoprocessor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.SleepLongerAtFirstCoprocessor.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException.SleepLongerAtFirstCoprocessor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.TestGetThread.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException.TestGetThread</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.TestPutThread.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException.TestPutThread</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerLoadDurability.html" title="class in org.apache.hadoop.hbase.client">TestServerLoadDurability</a></td>
 <td class="colLast">
 <div class="block">HBASE-19496 noticed that the RegionLoad/ServerLoad may be corrupted if rpc server
@@ -1547,28 +1551,24 @@
  invoke HMaster to iterate all stored server/region loads.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestShell.html" title="class in org.apache.hadoop.hbase.client">TestShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestShellNoCluster.html" title="class in org.apache.hadoop.hbase.client">TestShellNoCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestShutdownOfMetaReplicaHolder.html" title="class in org.apache.hadoop.hbase.client">TestShutdownOfMetaReplicaHolder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client">TestSimpleRequestController</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client">TestSmallReversedScanner</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
index ebc4270..547bb80 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -577,6 +577,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMutationGetCellBuilder.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestMutationGetCellBuilder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestMvccConsistentScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestOperation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPreadReversedScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPutDeleteEtcCellIteration</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPutDotHas</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPutWithDelete</span></a></li>
@@ -611,7 +612,6 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestServerLoadDurability.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestServerLoadDurability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSimpleRequestController</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSizeFailures</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSmallReversedScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSnapshotCloneIndependence</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMobSnapshotCloneIndependence.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestMobSnapshotCloneIndependence</span></a></li>
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 7990373..4c05e4d 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -3746,6 +3746,7 @@
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestPostIncrementAndAppendBeforeWAL</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithDifferntColumnFamilyObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestPostIncrementAndAppendBeforeWAL.ChangeCellWithNotExistColumnFamilyObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestPreadReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestPreadReversedScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestPrefetch.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestPrefetch</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">TestPrefixFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestPriorityRpc.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestPriorityRpc</span></a></li>
@@ -4273,7 +4274,6 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSize</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSizeFailures</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.namequeues.<a href="org/apache/hadoop/hbase/namequeues/TestSlowLogAccessor.html" title="class in org.apache.hadoop.hbase.namequeues"><span class="typeNameLink">TestSlowLogAccessor</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSmallReversedScanner.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSmallReversedScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">TestSnapshotCleanerChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.StoppableImplementation.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">TestSnapshotCleanerChore.StoppableImplementation</span></a> (implements org.apache.hadoop.hbase.Stoppable)</li>
 <li type="circle">org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestSnapshotClientRetries</span></a></li>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index 2c8561f..67b415f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -88,4268 +88,4269 @@
 <span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.Result;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Table;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.User;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.mapred.JobConf;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.zookeeper.WatchedEvent;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.zookeeper.ZooKeeper;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>/**<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * Facility for testing HBase. Replacement for<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * Not all methods work with the real cluster.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * Depends on log4j being on classpath and<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * logging levels.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * In the configuration properties, default values for master-info-port and<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * avoiding port contention if another local HBase instance is already running).<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * setting it to true.<a name="line.171"></a>
-<span class="sourceLineNo">172</span> */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>@InterfaceAudience.Public<a name="line.173"></a>
-<span class="sourceLineNo">174</span>@SuppressWarnings("deprecation")<a name="line.174"></a>
-<span class="sourceLineNo">175</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * used in mini dfs.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  @Deprecated<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * table.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Table;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.User;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.JobConf;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.zookeeper.WatchedEvent;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * Facility for testing HBase. Replacement for<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * Not all methods work with the real cluster.<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * Depends on log4j being on classpath and<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * logging levels.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * In the configuration properties, default values for master-info-port and<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * avoiding port contention if another local HBase instance is already running).<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * setting it to true.<a name="line.172"></a>
+<span class="sourceLineNo">173</span> */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>@InterfaceAudience.Public<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@SuppressWarnings("deprecation")<a name="line.175"></a>
+<span class="sourceLineNo">176</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * used in mini dfs.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private MiniDFSCluster dfsCluster = null;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private MiniMRCluster mrCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private volatile boolean miniClusterRunning;<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private String hadoopLogDir;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * HBaseTestingUtility*/<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private Path dataTestDirOnTestFS = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static String FS_URI;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Checks to see if a specific port is available.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param port the port number to check for availability<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public static boolean available(int port) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    ServerSocket ss = null;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    DatagramSocket ds = null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ss = new ServerSocket(port);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      ss.setReuseAddress(true);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      ds = new DatagramSocket(port);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      ds.setReuseAddress(true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    } catch (IOException e) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // Do nothing<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } finally {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      if (ds != null) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        ds.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ss != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        try {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          ss.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        } catch (IOException e) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          /* should not be thrown */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return false;<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>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * testing.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    for (Compression.Algorithm comprAlgo :<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    return Collections.unmodifiableList(configurations);<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>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Create combination of memstoreTS and tags<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    configurations.add(new Object[] { false, false });<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, true });<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    configurations.add(new Object[] { true, false });<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, true });<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return Collections.unmodifiableList(configurations);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    configurations.add(new Object[] { false, false, true });<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, false });<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, true, true });<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, false });<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { true, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    return Collections.unmodifiableList(configurations);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      bloomAndCompressionCombinations();<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private static String FS_URI;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param port the port number to check for availability<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static boolean available(int port) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    ServerSocket ss = null;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    DatagramSocket ds = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    try {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      ss = new ServerSocket(port);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      ss.setReuseAddress(true);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      ds = new DatagramSocket(port);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      ds.setReuseAddress(true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      return true;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    } catch (IOException e) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // Do nothing<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      if (ds != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        ds.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ss != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        try {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          ss.close();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        } catch (IOException e) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          /* should not be thrown */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return false;<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>  /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * testing.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (Compression.Algorithm comprAlgo :<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return Collections.unmodifiableList(configurations);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * Create combination of memstoreTS and tags<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, false });<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    configurations.add(new Object[] { false, true });<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, false });<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    configurations.add(new Object[] { true, true });<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return Collections.unmodifiableList(configurations);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, true });<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, false, false });<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, true });<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, true, false });<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return Collections.unmodifiableList(configurations);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      bloomAndCompressionCombinations();<a name="line.296"></a>
 <span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public HBaseTestingUtility() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this(HBaseConfiguration.create());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @param conf The configuration to use for further operations<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    super(conf);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // Save this for when setting default file:// breaks things<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    // Every cluster is a local cluster until we start DFS<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // Note that conf could be null, but this.conf will not be<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    String dataTestDir = getDataTestDir().toString();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // tests opt-out for random port assignment<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    closeRegionAndWAL((HRegion)r);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    if (r == null) return;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    r.close();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (r.getWAL() == null) return;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    r.getWAL().close();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * make a copy and use that.  Do<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return Instance of Configuration.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public Configuration getConfiguration() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return super.getConfiguration();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    this.hbaseCluster = hbaseCluster;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Give it a random name so can have many concurrent tests running if<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * System property, as it's what minidfscluster bases<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * instances -- another instance could grab the temporary<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * single instance only is how the minidfscluster works.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   *<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * We also create the underlying directory names for<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   *<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * @return The calculated data test build directory, if newly-created.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected Path setupDataTestDir() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Path testPath = super.setupDataTestDir();<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (null == testPath) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      "hadoop.log.dir",<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      testPath, "hadoop-log-dir");<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    createSubDirAndSystemProperty(<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      "hadoop.tmp.dir",<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      testPath, "hadoop-tmp-dir");<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    createSubDir(<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      "mapreduce.cluster.local.dir",<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      testPath, "mapred-local-dir");<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return testPath;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private void createSubDirAndSystemProperty(<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    String propertyName, Path parent, String subDirName){<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    String sysValue = System.getProperty(propertyName);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (sysValue != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // There is already a value set. So we do nothing but hope<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      //  that there will be no conflicts<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      String confValue = conf.get(propertyName);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.432"></a>
-<span class="sourceLineNo">433</span>       LOG.warn(<a name="line.433"></a>
-<span class="sourceLineNo">434</span>         propertyName + " property value differs in configuration and system: "+<a name="line.434"></a>
-<span class="sourceLineNo">435</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.435"></a>
-<span class="sourceLineNo">436</span>         " Erasing configuration value by system value."<a name="line.436"></a>
-<span class="sourceLineNo">437</span>       );<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      conf.set(propertyName, sysValue);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } else {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      createSubDir(propertyName, parent, subDirName);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      System.setProperty(propertyName, conf.get(propertyName));<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><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * for the test filesystem by default<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @see #setupDataTestDirOnTestFS()<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @see #getTestFileSystem()<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    FileSystem fs = getTestFileSystem();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * if the test relies on it.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @return a unique path in the test filesystem<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   */<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (dataTestDirOnTestFS == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      setupDataTestDirOnTestFS();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    return dataTestDirOnTestFS;<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * if the test relies on it.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * @return a unique path in the test filesystem<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * Creates a new directory if not already setup.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (dataTestDirOnTestFS != null) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          + dataTestDirOnTestFS.toString());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    //the working directory, and create a unique sub dir there<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    FileSystem fs = getTestFileSystem();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    Path newDataTestDir;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    String randomStr = getRandomUUID().toString();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    } else {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      Path base = getBaseTestDirOnTestFS();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      newDataTestDir = new Path(base, randomStr);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return newDataTestDir;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  /**<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * Cleans the test data directory on the test filesystem.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   * @return True if we removed the test dirs<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * @throws IOException<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   */<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (ret)<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      dataTestDirOnTestFS = null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return ret;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  /**<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return True if we removed child<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @throws IOException<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   */<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    return getTestFileSystem().delete(cpath, true);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  /**<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * Start a minidfscluster.<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param servers How many DNs to start.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @throws Exception<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @see #shutdownMiniDFSCluster()<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * @return The mini dfs cluster created.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return startMiniDFSCluster(servers, null);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   * Start a minidfscluster.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * like HDFS block location verification.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * datanodes will have the same host name.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param hosts hostnames DNs to run on.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   * @throws Exception<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @see #shutdownMiniDFSCluster()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @return The mini dfs cluster created.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  throws Exception {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    } else {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      return startMiniDFSCluster(1, null);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Start a minidfscluster.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Can only create one.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @param servers How many DNs to start.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @param hosts hostnames DNs to run on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @throws Exception<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * @see #shutdownMiniDFSCluster()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return The mini dfs cluster created.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  throws Exception {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  private void setFs() throws IOException {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if(this.dfsCluster == null){<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      return;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    // re-enable this check with dfs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throws Exception {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    createDirsAndSetProperties();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      "ERROR");<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        true, null, racks, hosts, null);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // Set this just-started cluster as our filesystem.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    setFs();<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>    // Wait for the cluster to be totally up<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    this.dfsCluster.waitClusterUp();<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    //reset the test directory for test file system<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    dataTestDirOnTestFS = null;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    String dataTestDir = getDataTestDir().toString();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    return this.dfsCluster;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    createDirsAndSetProperties();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      "ERROR");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        null, null, null);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return dfsCluster;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * the conf.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   * &lt;pre&gt;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * &lt;/pre&gt;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    setupClusterTestDir();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    createDirAndSetProperty("test.cache.data");<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    enableShortCircuit();<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      new Path(root, "mapred-output-dir").toString());<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *  new column families. Default to false.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    String v = System.getProperty(propName);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    if (v != null){<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      return Boolean.parseBoolean(v);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    return false;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  /**<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   *  This allows to specify this parameter on the command line.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   *   If not set, default is true.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public boolean isReadShortCircuitOn(){<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    String readOnProp = System.getProperty(propName);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    if (readOnProp != null){<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    } else {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      return conf.getBoolean(propName, false);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  /** Enable the short circuit read, unless configured differently.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   */<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  private void enableShortCircuit() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    if (isReadShortCircuitOn()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      String curUser = System.getProperty("user.name");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // read short circuit, for hdfs<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // read short circuit, for hbase<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    } else {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      LOG.info("read short circuit is OFF");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  private String createDirAndSetProperty(final String property) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return createDirAndSetProperty(property, property);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String path = getDataTestDir(relPath).toString();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    System.setProperty(property, path);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    conf.set(property, path);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    new File(path).mkdirs();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    return path;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * or does nothing.<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @throws IOException<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    if (this.dfsCluster != null) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      this.dfsCluster.shutdown();<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      dfsCluster = null;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      dataTestDirOnTestFS = null;<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  /**<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return The mini HBase cluster created.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @see #shutdownMiniCluster()<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   */<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  @Deprecated<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        .createWALDir(createWALDir).build();<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    return startMiniCluster(option);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  /**<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @return The mini HBase cluster created.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @see #shutdownMiniCluster()<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>   */<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  @Deprecated<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  throws Exception {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.795"></a>
-<span class="sourceLineNo">796</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    return startMiniCluster(option);<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>  /**<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @return The mini HBase cluster created.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @see #shutdownMiniCluster()<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   */<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  @Deprecated<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      boolean createWALDir) throws Exception {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        .createWALDir(createWALDir).build();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    return startMiniCluster(option);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  /**<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * @param numMasters Master node number.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @return The mini HBase cluster created.<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @see #shutdownMiniCluster()<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   */<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  @Deprecated<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    throws Exception {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        .numDataNodes(numSlaves).build();<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return startMiniCluster(option);<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>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @param numMasters Master node number.<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return The mini HBase cluster created.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * @see #shutdownMiniCluster()<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.853"></a>
-<span class="sourceLineNo">854</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   */<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  @Deprecated<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    return startMiniCluster(option);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * @param numMasters Master node number.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   *                      HDFS data node number.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return The mini HBase cluster created.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * @see #shutdownMiniCluster()<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
-<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      boolean createRootDir) throws Exception {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    return startMiniCluster(option);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * @param numMasters Master node number.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   *                      HDFS data node number.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * @return The mini HBase cluster created.<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * @see #shutdownMiniCluster()<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   */<a name="line.900"></a>
-<span class="sourceLineNo">901</span>  @Deprecated<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      throws Exception {<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    return startMiniCluster(option);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param numMasters Master node number.<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @param numRegionServers Number of region servers.<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @param numDataNodes Number of datanodes.<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   * @return The mini HBase cluster created.<a name="line.916"></a>
-<span class="sourceLineNo">917</span>   * @see #shutdownMiniCluster()<a name="line.917"></a>
-<span class="sourceLineNo">918</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  @Deprecated<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      throws Exception {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        .build();<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return startMiniCluster(option);<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>  /**<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @param numMasters Master node number.<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *                      HDFS data node number.<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * @return The mini HBase cluster created.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   * @see #shutdownMiniCluster()<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
-<span class="sourceLineNo">948</span>  @Deprecated<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      throws Exception {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.954"></a>
-<span class="sourceLineNo">955</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .build();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return startMiniCluster(option);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @param numMasters Master node number.<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * @param numRegionServers Number of region servers.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * @param numDataNodes Number of datanodes.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.967"></a>
-<span class="sourceLineNo">968</span>   *                      HDFS data node number.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.969"></a>
-<span class="sourceLineNo">970</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return The mini HBase cluster created.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * @see #shutdownMiniCluster()<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   */<a name="line.977"></a>
-<span class="sourceLineNo">978</span>  @Deprecated<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    throws Exception {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        .build();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    return startMiniCluster(option);<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * @param numMasters Master node number.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * @param numRegionServers Number of region servers.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   * @param numDataNodes Number of datanodes.<a name="line.996"></a>
-<span class="sourceLineNo">997</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.997"></a>
-<span class="sourceLineNo">998</span>   *                      HDFS data node number.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * @return The mini HBase cluster created.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @see #shutdownMiniCluster()<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  @Deprecated<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      boolean createWALDir) throws Exception {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        .build();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    return startMiniCluster(option);<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>  /**<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   * @see #shutdownMiniDFSCluster()<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>   */<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>    return startMiniCluster(option);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  /**<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @see #shutdownMiniDFSCluster()<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  }<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>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * @see #shutdownMiniDFSCluster()<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   */<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // If we already put up a cluster, fail.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    if (miniClusterRunning) {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    miniClusterRunning = true;<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    setupClusterTestDir();<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span><a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (dfsCluster == null) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      LOG.info("STARTING DFS");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    } else {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      LOG.info("NOT STARTING DFS");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // Start up a zk cluster.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (getZkCluster() == null) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      startMiniZKCluster(option.getNumZkServers());<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // Start the MiniHBaseCluster<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    return startMiniHBaseCluster(option);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>  }<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>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   */<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    throws IOException, InterruptedException {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    createRootDir(option.isCreateRootDir());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    if (option.isCreateWALDir()) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      createWALRootDir();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // for tests that do not read hbase-defaults.xml<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    setHBaseFsTmpDir();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // These settings will make the server waits until this exact number of<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    // regions servers are connected.<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span><a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    Configuration c = new Configuration(this.conf);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      option.getMasterClass(), option.getRsClass());<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>      for (;;) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (s.next() == null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          break;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        }<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><a name="line.1128"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   *<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public HBaseTestingUtility() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this(HBaseConfiguration.create());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  /**<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   *<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @param conf The configuration to use for further operations<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    super(conf);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // Save this for when setting default file:// breaks things<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // Every cluster is a local cluster until we start DFS<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    // Note that conf could be null, but this.conf will not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String dataTestDir = getDataTestDir().toString();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    // tests opt-out for random port assignment<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    closeRegionAndWAL((HRegion)r);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (r == null) return;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    r.close();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    if (r.getWAL() == null) return;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    r.getWAL().close();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * make a copy and use that.  Do<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @return Instance of Configuration.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Configuration getConfiguration() {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return super.getConfiguration();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    this.hbaseCluster = hbaseCluster;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Give it a random name so can have many concurrent tests running if<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * System property, as it's what minidfscluster bases<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * instances -- another instance could grab the temporary<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * single instance only is how the minidfscluster works.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   *<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * We also create the underlying directory names for<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   *<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return The calculated data test build directory, if newly-created.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected Path setupDataTestDir() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    Path testPath = super.setupDataTestDir();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (null == testPath) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    createSubDirAndSystemProperty(<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      "hadoop.log.dir",<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      testPath, "hadoop-log-dir");<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    createSubDirAndSystemProperty(<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      "hadoop.tmp.dir",<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      testPath, "hadoop-tmp-dir");<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    createSubDir(<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      "mapreduce.cluster.local.dir",<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      testPath, "mapred-local-dir");<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return testPath;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  private void createSubDirAndSystemProperty(<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    String propertyName, Path parent, String subDirName){<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    String sysValue = System.getProperty(propertyName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sysValue != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      // There is already a value set. So we do nothing but hope<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      //  that there will be no conflicts<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      String confValue = conf.get(propertyName);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.433"></a>
+<span class="sourceLineNo">434</span>       LOG.warn(<a name="line.434"></a>
+<span class="sourceLineNo">435</span>         propertyName + " property value differs in configuration and system: "+<a name="line.435"></a>
+<span class="sourceLineNo">436</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.436"></a>
+<span class="sourceLineNo">437</span>         " Erasing configuration value by system value."<a name="line.437"></a>
+<span class="sourceLineNo">438</span>       );<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      conf.set(propertyName, sysValue);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      createSubDir(propertyName, parent, subDirName);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * for the test filesystem by default<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * @see #setupDataTestDirOnTestFS()<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @see #getTestFileSystem()<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    FileSystem fs = getTestFileSystem();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * if the test relies on it.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @return a unique path in the test filesystem<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    if (dataTestDirOnTestFS == null) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<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>  /**<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   * if the test relies on it.<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * @return a unique path in the test filesystem<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  /**<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Creates a new directory if not already setup.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (dataTestDirOnTestFS != null) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          + dataTestDirOnTestFS.toString());<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      return;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    //the working directory, and create a unique sub dir there<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    FileSystem fs = getTestFileSystem();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    Path newDataTestDir;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    String randomStr = getRandomUUID().toString();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    } else {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      Path base = getBaseTestDirOnTestFS();<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      newDataTestDir = new Path(base, randomStr);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    return newDataTestDir;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>  /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * Cleans the test data directory on the test filesystem.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @return True if we removed the test dirs<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   * @throws IOException<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   */<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    if (ret)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      dataTestDirOnTestFS = null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    return ret;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  /**<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.533"></a>
+<span class="sourceLineNo">534</span>   * @return True if we removed child<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * @throws IOException<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    return getTestFileSystem().delete(cpath, true);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * Start a minidfscluster.<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   * @param servers How many DNs to start.<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * @throws Exception<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @see #shutdownMiniDFSCluster()<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * @return The mini dfs cluster created.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   */<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    return startMiniDFSCluster(servers, null);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   * Start a minidfscluster.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   * like HDFS block location verification.<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * datanodes will have the same host name.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param hosts hostnames DNs to run on.<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @throws Exception<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @see #shutdownMiniDFSCluster()<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @return The mini dfs cluster created.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  throws Exception {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    } else {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      return startMiniDFSCluster(1, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * Start a minidfscluster.<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Can only create one.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @param servers How many DNs to start.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param hosts hostnames DNs to run on.<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @throws Exception<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @see #shutdownMiniDFSCluster()<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return The mini dfs cluster created.<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  throws Exception {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  private void setFs() throws IOException {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    if(this.dfsCluster == null){<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      return;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    // re-enable this check with dfs<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      throws Exception {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    createDirsAndSetProperties();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      "ERROR");<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        true, null, racks, hosts, null);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    // Set this just-started cluster as our filesystem.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    setFs();<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>    // Wait for the cluster to be totally up<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    this.dfsCluster.waitClusterUp();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    //reset the test directory for test file system<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    dataTestDirOnTestFS = null;<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    String dataTestDir = getDataTestDir().toString();<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>    return this.dfsCluster;<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    createDirsAndSetProperties();<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      "ERROR");<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        null, null, null);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    return dfsCluster;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.639"></a>
+<span class="sourceLineNo">640</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.640"></a>
+<span class="sourceLineNo">641</span>   * the conf.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>   * &lt;pre&gt;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * }<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * &lt;/pre&gt;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    setupClusterTestDir();<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    createDirAndSetProperty("test.cache.data");<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    enableShortCircuit();<a name="line.659"></a>
+<span class="sourceLineNo">660</span><a name="line.660"></a>
+<span class="sourceLineNo">661</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      new Path(root, "mapred-output-dir").toString());<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   *  new column families. Default to false.<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   */<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    String v = System.getProperty(propName);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    if (v != null){<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return Boolean.parseBoolean(v);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    return false;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   *  This allows to specify this parameter on the command line.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   *   If not set, default is true.<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReadShortCircuitOn(){<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    String readOnProp = System.getProperty(propName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (readOnProp != null){<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    } else {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      return conf.getBoolean(propName, false);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>  /** Enable the short circuit read, unless configured differently.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   */<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  private void enableShortCircuit() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    if (isReadShortCircuitOn()) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      String curUser = System.getProperty("user.name");<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // read short circuit, for hdfs<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      // read short circuit, for hbase<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    } else {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      LOG.info("read short circuit is OFF");<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  private String createDirAndSetProperty(final String property) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    return createDirAndSetProperty(property, property);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>  }<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    String path = getDataTestDir(relPath).toString();<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    System.setProperty(property, path);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    conf.set(property, path);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    new File(path).mkdirs();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    return path;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * or does nothing.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @throws IOException<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   */<a name="line.752"></a>
+<span class="sourceLineNo">753</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    if (this.dfsCluster != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      this.dfsCluster.shutdown();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      dfsCluster = null;<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      dataTestDirOnTestFS = null;<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @return The mini HBase cluster created.<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @see #shutdownMiniCluster()<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   */<a name="line.773"></a>
+<span class="sourceLineNo">774</span>  @Deprecated<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        .createWALDir(createWALDir).build();<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    return startMiniCluster(option);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>  /**<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.782"></a>
+<span class="sourceLineNo">783</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.783"></a>
+<span class="sourceLineNo">784</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.784"></a>
+<span class="sourceLineNo">785</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.785"></a>
+<span class="sourceLineNo">786</span>   * @return The mini HBase cluster created.<a name="line.786"></a>
+<span class="sourceLineNo">787</span>   * @see #shutdownMiniCluster()<a name="line.787"></a>
+<span class="sourceLineNo">788</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.788"></a>
+<span class="sourceLineNo">789</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.789"></a>
+<span class="sourceLineNo">790</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   */<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  @Deprecated<a name="line.793"></a>
+<span class="sourceLineNo">794</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.794"></a>
+<span class="sourceLineNo">795</span>  throws Exception {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    return startMiniCluster(option);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return The mini HBase cluster created.<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @see #shutdownMiniCluster()<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.809"></a>
+<span class="sourceLineNo">810</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.811"></a>
+<span class="sourceLineNo">812</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.812"></a>
+<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  @Deprecated<a name="line.814"></a>
+<span class="sourceLineNo">815</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>      boolean createWALDir) throws Exception {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.817"></a>
+<span class="sourceLineNo">818</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.818"></a>
+<span class="sourceLineNo">819</span>        .createWALDir(createWALDir).build();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    return startMiniCluster(option);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param numMasters Master node number.<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @return The mini HBase cluster created.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @see #shutdownMiniCluster()<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    throws Exception {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        .numDataNodes(numSlaves).build();<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return startMiniCluster(option);<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @param numMasters Master node number.<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * @return The mini HBase cluster created.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * @see #shutdownMiniCluster()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   */<a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Deprecated<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    return startMiniCluster(option);<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>  /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * @param numMasters Master node number.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   *                      HDFS data node number.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * @return The mini HBase cluster created.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * @see #shutdownMiniCluster()<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      boolean createRootDir) throws Exception {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.883"></a>
+<span class="sourceLineNo">884</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    return startMiniCluster(option);<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>  /**<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * @param numMasters Master node number.<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   *                      HDFS data node number.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @return The mini HBase cluster created.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * @see #shutdownMiniCluster()<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   */<a name="line.901"></a>
+<span class="sourceLineNo">902</span>  @Deprecated<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      throws Exception {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    return startMiniCluster(option);<a name="line.908"></a>
+<span class="sourceLineNo">909</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.912"></a>
+<span class="sourceLineNo">913</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @param numMasters Master node number.<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   * @param numRegionServers Number of region servers.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   * @param numDataNodes Number of datanodes.<a name="line.916"></a>
+<span class="sourceLineNo">917</span>   * @return The mini HBase cluster created.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * @see #shutdownMiniCluster()<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.921"></a>
+<span class="sourceLineNo">922</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>   */<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  @Deprecated<a name="line.924"></a>
+<span class="sourceLineNo">925</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.925"></a>
+<span class="sourceLineNo">926</span>      throws Exception {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        .build();<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    return startMiniCluster(option);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>  /**<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @param numMasters Master node number.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   *                      HDFS data node number.<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @return The mini HBase cluster created.<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @see #shutdownMiniCluster()<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
+<span class="sourceLineNo">949</span>  @Deprecated<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      throws Exception {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.954"></a>
+<span class="sourceLineNo">955</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.955"></a>
+<span class="sourceLineNo">956</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.957"></a>
+<span class="sourceLineNo">958</span>        .build();<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    return startMiniCluster(option);<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  }<a name="line.960"></a>
+<span class="sourceLineNo">961</span><a name="line.961"></a>
+<span class="sourceLineNo">962</span>  /**<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @param numMasters Master node number.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * @param numRegionServers Number of region servers.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * @param numDataNodes Number of datanodes.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   *                      HDFS data node number.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   * @return The mini HBase cluster created.<a name="line.972"></a>
+<span class="sourceLineNo">973</span>   * @see #shutdownMiniCluster()<a name="line.973"></a>
+<span class="sourceLineNo">974</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.975"></a>
+<span class="sourceLineNo">976</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  @Deprecated<a name="line.979"></a>
+<span class="sourceLineNo">980</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    throws Exception {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        .build();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    return startMiniCluster(option);<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>  /**<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * @param numMasters Master node number.<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * @param numRegionServers Number of region servers.<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * @param numDataNodes Number of datanodes.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   *                      HDFS data node number.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * @return The mini HBase cluster created.<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * @see #shutdownMiniCluster()<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   */<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>  @Deprecated<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      boolean createWALDir) throws Exception {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        .build();<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    return startMiniCluster(option);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  /**<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * @see #shutdownMiniDFSCluster()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    return startMiniCluster(option);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>  }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>  /**<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>   * @see #shutdownMiniDFSCluster()<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   */<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<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>  /**<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * @see #shutdownMiniDFSCluster()<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   */<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // If we already put up a cluster, fail.<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    if (miniClusterRunning) {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    miniClusterRunning = true;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    setupClusterTestDir();<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    if (dfsCluster == null) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      LOG.info("STARTING DFS");<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    } else {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      LOG.info("NOT STARTING DFS");<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span><a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // Start up a zk cluster.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    if (getZkCluster() == null) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      startMiniZKCluster(option.getNumZkServers());<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>    // Start the MiniHBaseCluster<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   */<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    throws IOException, InterruptedException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    createRootDir(option.isCreateRootDir());<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    if (option.isCreateWALDir()) {<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      createWALRootDir();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    // for tests that do not read hbase-defaults.xml<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    setHBaseFsTmpDir();<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    // These settings will make the server waits until this exact number of<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // regions servers are connected.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span><a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    Configuration c = new Configuration(this.conf);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      option.getMasterClass(), option.getRsClass());<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      for (;;) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        if (s.next() == null) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          break;<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>    }<a name="line.1128"></a>
 <span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span><a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    return (MiniHBaseCluster) hbaseCluster;<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>  /**<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * Starts up mini hbase cluster using default options.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   */<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>  /**<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>   * Starts up mini hbase cluster.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>   * @param numMasters Master node number.<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   * @param numRegionServers Number of region servers.<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   * @return The mini HBase cluster created.<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   */<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  @Deprecated<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      throws IOException, InterruptedException {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    return startMiniHBaseCluster(option);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>  }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  /**<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   * Starts up mini hbase cluster.<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>   * @param numMasters Master node number.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>   * @param numRegionServers Number of region servers.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>   * @return The mini HBase cluster created.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>   */<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  @Deprecated<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    return startMiniHBaseCluster(option);<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  /**<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>   * Starts up mini hbase cluster.<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   * @param numMasters Master node number.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @param numRegionServers Number of region servers.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>   * @return The mini HBase cluster created.<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   */<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  @Deprecated<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * @param servers number of region servers<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   */<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    this.restartHBaseCluster(servers, null);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      throws IOException, InterruptedException {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    StartMiniClusterOption option =<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    restartHBaseCluster(option);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    invalidateConnection();<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      throws IOException, InterruptedException {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    closeConnection();<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    this.hbaseCluster =<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>            option.getRsClass());<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    while (s.next() != null) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>      // do nothing<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    LOG.info("HBase has been restarted");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    s.close();<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    t.close();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    conn.close();<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   * to {@link #startMiniCluster()}.<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @see #startMiniCluster()<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>                               MiniHBaseCluster.class.getName());<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * @see #startMiniCluster(int)<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   */<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    LOG.info("Shutting down minicluster");<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>    shutdownMiniHBaseCluster();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    shutdownMiniDFSCluster();<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    shutdownMiniZKCluster();<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span><a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    cleanupTestDir();<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    miniClusterRunning = false;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    LOG.info("Minicluster is down");<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  }<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   */<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    cleanup();<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    if (this.hbaseCluster != null) {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>      this.hbaseCluster.shutdown();<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      this.hbaseCluster = null;<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (zooKeeperWatcher != null) {<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      zooKeeperWatcher.close();<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      zooKeeperWatcher = null;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  }<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span><a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  /**<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    cleanup();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    if (this.hbaseCluster != null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      getMiniHBaseCluster().killAll();<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      this.hbaseCluster = null;<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    if (zooKeeperWatcher != null) {<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>      zooKeeperWatcher.close();<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      zooKeeperWatcher = null;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  private void cleanup() throws IOException {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    closeConnection();<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  }<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  /**<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>   * before or not. If false, previous path is used.<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>   * Note: this does not cause the root dir to be created.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>   * @throws IOException<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>   */<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    if (!create) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return getDataTestDirOnTestFS();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } else {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      return getNewDataTestDirOnTestFS();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  /**<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Note: this does not cause the root dir to be created.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   * @throws IOException<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    return getDefaultRootDirPath(false);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>  }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  /**<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>   * method if you were doing manual operation.<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * @param create This flag decides whether to get a new<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   * If directory already exists, it will be overwritten<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   * @return Fully qualified path to hbase root dir<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   * @throws IOException<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   */<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    fs.mkdirs(hbaseRootdir);<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    return hbaseRootdir;<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * @return Fully qualified path to hbase root dir<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   * @throws IOException<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>   */<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  public Path createRootDir() throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>    return createRootDir(false);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span><a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Creates a hbase walDir in the user's home directory.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   * method if you were doing manual operation.<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>   *<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>   * @return Fully qualified path to hbase root dir<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>   * @throws IOException<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>  */<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  public Path createWALRootDir() throws IOException {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    fs.mkdirs(walDir);<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    return walDir;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>  }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span><a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    } else {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>  }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  /**<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>   * Flushes all caches in the mini hbase cluster<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>   * @throws IOException<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>   */<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  public void flush() throws IOException {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    getMiniHBaseCluster().flushcache();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  /**<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>   * Flushes all caches in the mini hbase cluster<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>   * @throws IOException<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>   */<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  public void flush(TableName tableName) throws IOException {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span><a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>   * Compact all regions in the mini hbase cluster<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>   * @throws IOException<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>   */<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>  public void compact(boolean major) throws IOException {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    getMiniHBaseCluster().compact(major);<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span><a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>   * @throws IOException<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>   */<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    getMiniHBaseCluster().compact(tableName, major);<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>   * Create a table.<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>   * @param tableName<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @param family<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   * @return A Table instance for the created table.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   * @throws IOException<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   */<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public Table createTable(TableName tableName, String family)<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  throws IOException{<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    return createTable(tableName, new String[]{family});<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   * Create a table.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>   * @param tableName<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>   * @param families<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>   * @return A Table instance for the created table.<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>   * @throws IOException<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   */<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  throws IOException {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    for (String family : families) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      fams.add(Bytes.toBytes(family));<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Create a table.<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * @param tableName<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   * @param family<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   * @return A Table instance for the created table.<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   * @throws IOException<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   */<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>  throws IOException{<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    return createTable(tableName, new byte[][]{family});<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>  /**<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * Create a table with multiple regions.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   * @param tableName<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   * @param family<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   * @param numRegions<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   * @return A Table instance for the created table.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   * @throws IOException<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>   */<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>      throws IOException {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  /**<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>   * Create a table.<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>   * @param tableName<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>   * @param families<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>   * @return A Table instance for the created table.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>   * @throws IOException<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>   */<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  throws IOException {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    return createTable(tableName, families, (byte[][]) null);<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>   * Create a table with multiple regions.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>   * @param tableName<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>   * @param families<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>   * @return A Table instance for the created table.<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>   * @throws IOException<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   */<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>  }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span><a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  /**<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>   * Create a table with multiple regions.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>   * @param tableName<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>   * @param replicaCount replica count.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>   * @param families<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>   * @return A Table instance for the created table.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>   * @throws IOException<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   */<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    throws IOException {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  /**<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>   * Create a table.<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>   * @param tableName<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>   * @param families<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>   * @param splitKeys<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>   * @return A Table instance for the created table.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>   * @throws IOException<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>   */<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      throws IOException {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Create a table.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   * @param tableName the table name<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>   * @param families the families<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>   * @param splitKeys the splitkeys<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>   * @param replicaCount the region replica count<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>   * @return A Table instance for the created table.<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>   * @throws IOException throws IOException<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>   */<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      int replicaCount) throws IOException {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      new Configuration(getConfiguration()));<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  }<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    // should wait until they are assigned<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    return getConnection().getTable(tableName);<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  /**<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   * Create a table.<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>   * @param c Configuration to use<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>   * @return A Table instance for the created table.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>   */<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    throws IOException {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return createTable(htd, families, null, c);<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>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Create a table.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   * @param htd table descriptor<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>   * @param families array of column families<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * @param splitKeys array of split keys<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   * @param c Configuration to use<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>   * @return A Table instance for the created table.<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>   */<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      Configuration c) throws IOException {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    // on is interfering.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Create a table.<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   * @param htd table descriptor<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>   * @param families array of column families<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>   * @param splitKeys array of split keys<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>   * @param type Bloom type<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>   * @param blockSize block size<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>   * @param c Configuration to use<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>   * @return A Table instance for the created table.<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   */<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span><a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    for (byte[] family : families) {<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>        .setBloomFilterType(type)<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>        .setBlocksize(blockSize);<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>          cfdb.setNewVersionBehavior(true);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      builder.setColumnFamily(cfdb.build());<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    TableDescriptor td = builder.build();<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    if (splitKeys != null) {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      getAdmin().createTable(td, splitKeys);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    } else {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      getAdmin().createTable(td);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    // we should wait until they are assigned<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    return getConnection().getTable(td.getTableName());<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>  }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  /**<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>   * Create a table.<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>   * @param htd table descriptor<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   * @param splitRows array of split keys<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>   * @return A Table instance for the created table.<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>   * @throws IOException<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>   */<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      throws IOException {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>           .setNewVersionBehavior(true).build());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    if (splitRows != null) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    } else {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      getAdmin().createTable(builder.build());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    // we should wait until they are assigned<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return getConnection().getTable(htd.getTableName());<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * Create a table.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param tableName the table name<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param families the families<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @param splitKeys the split keys<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   * @param replicaCount the replica count<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>   * @param c Configuration to use<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * @return A Table instance for the created table.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   */<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    TableDescriptor htd =<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    return createTable(htd, families, splitKeys, c);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>   * Create a table.<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>   * @return A Table instance for the created table.<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   */<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>  }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>  /**<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   * Create a table.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>   * @return A Table instance for the created table.<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>   */<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      throws IOException {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<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>  /**<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>   * Create a table.<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>   * @return A Table instance for the created table.<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>   */<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      byte[][] splitKeys) throws IOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    for (byte[] family : families) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>        .setMaxVersions(numVersions);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    if (splitKeys != null) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    } else {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      getAdmin().createTable(builder.build());<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    // assigned<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    return getConnection().getTable(tableName);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>  }<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>   * Create a table with multiple regions.<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   * @return A Table instance for the created table.<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>   */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      throws IOException {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  /**<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   * Create a table.<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>   * @return A Table instance for the created table.<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>   */<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    int numVersions, int blockSize) throws IOException {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    for (byte[] family : families) {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    getAdmin().createTable(builder.build());<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // assigned<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    return getConnection().getTable(tableName);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span><a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    for (byte[] family : families) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    if (cpName != null) {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      builder.setCoprocessor(cpName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    getAdmin().createTable(builder.build());<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    // assigned<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    return getConnection().getTable(tableName);<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  }<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span><a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>  /**<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>   * Create a table.<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>   * @return A Table instance for the created table.<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>   */<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    throws IOException {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    int i = 0;<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    for (byte[] family : families) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      i++;<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    getAdmin().createTable(builder.build());<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // assigned<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    return getConnection().getTable(tableName);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>  }<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>   * Create a table.<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>   * @return A Table instance for the created table.<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   */<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    throws IOException {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // assigned<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Create a table with multiple regions.<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * @return A Table instance for the created table.<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>  /**<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * Modify a table, synchronous.<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>   */<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>  @Deprecated<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      throws IOException, InterruptedException {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>    admin.modifyTable(desc);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * Set the number of Region replicas.<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    throws IOException, InterruptedException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      .setRegionReplication(replicaCount).build();<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    admin.modifyTable(desc);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  /**<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>   * Drop an existing table<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>   * @param tableName existing table<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>   */<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      getAdmin().disableTable(tableName);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    } catch (TableNotEnabledException e) {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    }<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    getAdmin().deleteTable(tableName);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>  }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span><a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  /**<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>   * Drop an existing table<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>   * @param tableName existing table<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>   */<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      deleteTable(tableName);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>    } catch (TableNotFoundException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      // ignore<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>  }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span><a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>  // ==========================================================================<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  // Canned table and table descriptor creation<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  private static final int MAXVERSIONS = 3;<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  public static final char FIRST_CHAR = 'a';<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  public static final char LAST_CHAR = 'z';<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span><a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>    return builder.build();<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>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    return builder;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  }<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>   * @param name Name to give table.<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>   * @return Column descriptor.<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   */<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    int maxVersions) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>    for (byte[] family : families) {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>    }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    return builder.build();<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span><a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  /**<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   * @param startKey the start boundary of the region<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>   * @param endKey the end boundary of the region<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>   * @return a region that writes to local dir for testing<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>   */<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    throws IOException {<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      .setEndKey(endKey).build();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    return createLocalHRegion(hri, desc);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  /**<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   */<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  }<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span><a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>  /**<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>   * @param info regioninfo<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>   * @param conf configuration<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>   * @param desc table descriptor<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>   * @param wal wal for this region.<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>   * @return created hregion<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>   * @throws IOException<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>   */<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      WAL wal) throws IOException {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span><a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>  /**<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>   * @param tableName<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>   * @param startKey<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * @param stopKey<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   * @param isReadOnly<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * @param families<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * @return A region on which you must call<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @throws IOException<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   */<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      throws IOException {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        durability, wal, null, families);<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    builder.setReadOnly(isReadOnly);<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    int i = 0;<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    for (byte[] family : families) {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>      i++;<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      // Set default to be three versions.<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    builder.setDurability(durability);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    RegionInfo info =<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>  }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span><a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  //<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  // ==========================================================================<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span><a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  /**<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>   * Provide an existing table name to truncate.<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>   * Scans the table and issues a delete for each row read.<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>   * @param tableName existing table<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>   * @return HTable to that new table<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>   * @throws IOException<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>   */<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    Table table = getConnection().getTable(tableName);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    Scan scan = new Scan();<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    for(Result res : resScan) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      Delete del = new Delete(res.getRow());<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>      table.delete(del);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    resScan = table.getScanner(scan);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    resScan.close();<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    return table;<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>  /**<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   * Truncate a table using the admin command.<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param tableName table which must exist.<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @param preserveRegions keep the existing split points<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   * @return HTable for the new table<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>   */<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      IOException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    Admin admin = getAdmin();<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      admin.disableTable(tableName);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>   * Truncate a table using the admin command.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>   * For previous behavior of issuing row deletes, see<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>   * deleteTableData.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>   * Expressly does not preserve regions of existing table.<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>   * @param tableName table which must exist.<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>   * @return HTable for the new table<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>   */<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    return truncateTable(tableName, false);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>  }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  /**<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>   * @param t Table<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>   * @param f Family<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>   * @return Count of rows loaded.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>   * @throws IOException<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>   */<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    return loadTable(t, new byte[][] {f});<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>  }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span><a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>  /**<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>   * @param t Table<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>   * @param f Family<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>   * @return Count of rows loaded.<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @throws IOException<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   */<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  /**<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   * @param t Table<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>   * @param f Array of Families to load<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>   * @return Count of rows loaded.<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @throws IOException<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   */<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    return loadTable(t, f, null);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  }<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>  /**<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>   * @param t Table<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>   * @param f Array of Families to load<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>   * @return Count of rows loaded.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>   * @throws IOException<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>   */<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    return loadTable(t, f, value, true);<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span><a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  /**<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * @param t Table<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   * @param f Array of Families to load<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   * @return Count of rows loaded.<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   * @throws IOException<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   */<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      boolean writeToWAL) throws IOException {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>      Put put = new Put(row);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>        byte[] value1 = value != null ? value : row;<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        put.addColumn(f[i], f[i], value1);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      puts.add(put);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>    }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    t.put(puts);<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    return puts.size();<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span><a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  /** A tracker for tracking and validating table rows<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   */<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  public static class SeenRowTracker {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    int dim = 'z' - 'a' + 1;<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    byte[] startRow;<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    byte[] stopRow;<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span><a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>      this.startRow = startRow;<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>      this.stopRow = stopRow;<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    void reset() {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      for (byte[] row : ROWS) {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span><a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    int i(byte b) {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>      return b - 'a';<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>    public void addRow(byte[] row) {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    }<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>     * all other rows none<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>     */<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    public void validate() {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>            int expectedCount = 0;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>              expectedCount = 1;<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>            }<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>            if (count != expectedCount) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>                  "instead of " + expectedCount);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>    }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  }<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>    return loadRegion(r, f, false);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>  }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    return loadRegion((HRegion)r, f);<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span><a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  /**<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * @param r Region<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * @param f Family<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   * @param flush flush the cache if true<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>   * @return Count of rows loaded.<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>   * @throws IOException<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>   */<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  throws IOException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    byte[] k = new byte[3];<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    int rowCount = 0;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          k[0] = b1;<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          k[1] = b2;<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          k[2] = b3;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          Put put = new Put(k);<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>          put.addColumn(f, null, k);<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>          if (r.getWAL() == null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>          }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>          int preRowCount = rowCount;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          int pause = 10;<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>          int maxPause = 1000;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>          while (rowCount == preRowCount) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>            try {<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>              r.put(put);<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>              rowCount++;<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>            } catch (RegionTooBusyException e) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>              Threads.sleep(pause);<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>            }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          }<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>        }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>      }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      if (flush) {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        r.flush(true);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>    }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>    return rowCount;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>      throws IOException {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      Put put = new Put(data);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      put.addColumn(f, null, data);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>      t.put(put);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    }<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      throws IOException {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    Random r = new Random();<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    byte[] row = new byte[rowSize];<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      r.nextBytes(row);<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      Put put = new Put(row);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      t.put(put);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int replicaId)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      throws IOException {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      Get get = new Get(data);<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      get.setReplicaId(replicaId);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      Result result = table.get(get);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      assertTrue(failMsg,<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>          cell.getValueLength()));<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    }<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>  }<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span><a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      throws IOException {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>  }<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span><a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      throws IOException {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      final boolean present) throws IOException {<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>  }<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span><a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      final boolean present) throws IOException {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>      Result result = region.get(new Get(data));<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span><a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      if (!present) continue;<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      assertTrue(failMsg,<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>          cell.getValueLength()));<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    }<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>  }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span><a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      throws IOException {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      Delete delete = new Delete(data);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      delete.addFamily(f);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      t.delete(delete);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>    }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>  }<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span><a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>  /**<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>   * Return the number of rows in the given table.<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>   * @param table to count rows<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>   * @return count of rows<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>   */<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  public static int countRows(final Table table) throws IOException {<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>    return countRows(table, new Scan());<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>  }<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span><a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      int count = 0;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      while (results.next() != null) {<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        count++;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>      return count;<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    Scan scan = new Scan();<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    for (byte[] family: families) {<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>      scan.addFamily(family);<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    }<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    return countRows(table, scan);<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  }<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span><a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>  /**<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>   * Return the number of rows in the given table.<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>   */<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    Table table = getConnection().getTable(tableName);<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    try {<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      return countRows(table);<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    } finally {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      table.close();<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>  }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span><a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>  public int countRows(final Region region) throws IOException {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    return countRows(region, new Scan());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>  }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span><a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>    try {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return countRows(scanner);<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    } finally {<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>      scanner.close();<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    }<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  }<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    int scannedCount = 0;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    boolean hasMore = true;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    while (hasMore) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>      hasMore = scanner.next(results);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      scannedCount += results.size();<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      results.clear();<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>    return scannedCount;<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>  }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span><a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>  /**<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>   */<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span><a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    Scan scan = new Scan();<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    ResultScanner results = table.getScanner(scan);<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>    for (Result res : results) {<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      digest.update(res.getRow());<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>    }<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    results.close();<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>    return digest.toString();<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>  }<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span><a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>  static {<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    int i = 0;<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          ROWS[i][0] = b1;<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>          ROWS[i][1] = b2;<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          ROWS[i][2] = b3;<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>          i++;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        }<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>      }<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    }<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>  }<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span><a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>  public static final byte[][] KEYS = {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>  };<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span><a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>      Bytes.toBytes("bbb"),<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>  };<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>  /**<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>   * want to form a proper range of regions.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>   * @param conf<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>   * @param htd<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>   * @param startKeys<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>   * @return list of region info for regions added to meta<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>   * @throws IOException<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>   */<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  throws IOException {<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    MetaTableAccessor<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>    // add custom ones<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>      int j = (i + 1) % startKeys.length;<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>          .setStartKey(startKeys[i])<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>          .setEndKey(startKeys[j])<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>          .build();<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      newRegions.add(hri);<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    }<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span><a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    meta.close();<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    return newRegions;<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>  }<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span><a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>  /**<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>   */<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      throws IOException {<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    // unless I pass along via the conf.<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<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">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    return (MiniHBaseCluster) hbaseCluster;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Starts up mini hbase cluster using default options.<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>   */<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>  }<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>   * Starts up mini hbase cluster.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * @param numMasters Master node number.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   * @param numRegionServers Number of region servers.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * @return The mini HBase cluster created.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>  @Deprecated<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      throws IOException, InterruptedException {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    return startMiniHBaseCluster(option);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>  /**<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>   * Starts up mini hbase cluster.<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   * @param numMasters Master node number.<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   * @param numRegionServers Number of region servers.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   * @return The mini HBase cluster created.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   */<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  @Deprecated<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    return startMiniHBaseCluster(option);<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  /**<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>   * Starts up mini hbase cluster.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   * @param numMasters Master node number.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * @param numRegionServers Number of region servers.<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>   * @return The mini HBase cluster created.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  @Deprecated<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    return startMiniHBaseCluster(option);<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  }<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span><a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>  /**<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   * @param servers number of region servers<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    this.restartHBaseCluster(servers, null);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      throws IOException, InterruptedException {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    StartMiniClusterOption option =<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    restartHBaseCluster(option);<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>    invalidateConnection();<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  }<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span><a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      throws IOException, InterruptedException {<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    closeConnection();<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    this.hbaseCluster =<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>            option.getRsClass());<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    while (s.next() != null) {<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      // do nothing<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    LOG.info("HBase has been restarted");<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>    s.close();<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    t.close();<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    conn.close();<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * to {@link #startMiniCluster()}.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * @see #startMiniCluster()<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>                               MiniHBaseCluster.class.getName());<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span><a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>  /**<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @see #startMiniCluster(int)<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    LOG.info("Shutting down minicluster");<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    shutdownMiniHBaseCluster();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    shutdownMiniDFSCluster();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    shutdownMiniZKCluster();<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    cleanupTestDir();<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    miniClusterRunning = false;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    LOG.info("Minicluster is down");<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  }<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  /**<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    cleanup();<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    if (this.hbaseCluster != null) {<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>      this.hbaseCluster.shutdown();<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      this.hbaseCluster = null;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    if (zooKeeperWatcher != null) {<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>      zooKeeperWatcher.close();<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>      zooKeeperWatcher = null;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    }<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>   */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    cleanup();<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    if (this.hbaseCluster != null) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      getMiniHBaseCluster().killAll();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      this.hbaseCluster = null;<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    if (zooKeeperWatcher != null) {<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      zooKeeperWatcher.close();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      zooKeeperWatcher = null;<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  private void cleanup() throws IOException {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    closeConnection();<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>  }<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span><a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  /**<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>   * before or not. If false, previous path is used.<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   * Note: this does not cause the root dir to be created.<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * @throws IOException<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   */<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    if (!create) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      return getDataTestDirOnTestFS();<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    } else {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      return getNewDataTestDirOnTestFS();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  /**<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>   * Note: this does not cause the root dir to be created.<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    return getDefaultRootDirPath(false);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>  }<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /**<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * method if you were doing manual operation.<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * @param create This flag decides whether to get a new<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * If directory already exists, it will be overwritten<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   * @return Fully qualified path to hbase root dir<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @throws IOException<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>    fs.mkdirs(hbaseRootdir);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>    return hbaseRootdir;<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  /**<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * @return Fully qualified path to hbase root dir<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * @throws IOException<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public Path createRootDir() throws IOException {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    return createRootDir(false);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  }<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>   * Creates a hbase walDir in the user's home directory.<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   * method if you were doing manual operation.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   *<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>   * @return Fully qualified path to hbase root dir<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>   * @throws IOException<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  */<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public Path createWALRootDir() throws IOException {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    fs.mkdirs(walDir);<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    return walDir;<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    } else {<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    }<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>  }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>  /**<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   * Flushes all caches in the mini hbase cluster<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>   * @throws IOException<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>   */<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>  public void flush() throws IOException {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    getMiniHBaseCluster().flushcache();<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>  }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>  /**<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>   * Flushes all caches in the mini hbase cluster<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>   * @throws IOException<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>   */<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  public void flush(TableName tableName) throws IOException {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  }<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>   * Compact all regions in the mini hbase cluster<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>   * @throws IOException<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   */<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  public void compact(boolean major) throws IOException {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    getMiniHBaseCluster().compact(major);<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>  }<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span><a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  /**<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>   * @throws IOException<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>   */<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    getMiniHBaseCluster().compact(tableName, major);<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>  /**<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   * Create a table.<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   * @param tableName<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   * @param family<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @return A Table instance for the created table.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   * @throws IOException<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  public Table createTable(TableName tableName, String family)<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  throws IOException{<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    return createTable(tableName, new String[]{family});<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>  }<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span><a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  /**<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   * Create a table.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   * @param tableName<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>   * @param families<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>   * @return A Table instance for the created table.<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>   * @throws IOException<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>  throws IOException {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    for (String family : families) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      fams.add(Bytes.toBytes(family));<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /**<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * Create a table.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   * @param tableName<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   * @param family<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   * @return A Table instance for the created table.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   * @throws IOException<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   */<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  throws IOException{<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    return createTable(tableName, new byte[][]{family});<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  }<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * Create a table with multiple regions.<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * @param tableName<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   * @param family<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   * @param numRegions<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   * @return A Table instance for the created table.<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>   * @throws IOException<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      throws IOException {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span><a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>  }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  /**<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * Create a table.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   * @param tableName<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>   * @param families<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>   * @return A Table instance for the created table.<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>   * @throws IOException<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>   */<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  throws IOException {<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    return createTable(tableName, families, (byte[][]) null);<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>  /**<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>   * Create a table with multiple regions.<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>   * @param tableName<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>   * @param families<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>   * @return A Table instance for the created table.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>   * @throws IOException<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>   */<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>  }<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>   * Create a table with multiple regions.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>   * @param tableName<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>   * @param replicaCount replica count.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>   * @param families<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>   * @return A Table instance for the created table.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>   * @throws IOException<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   */<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    throws IOException {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  /**<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>   * Create a table.<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>   * @param tableName<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>   * @param families<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>   * @param splitKeys<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>   * @return A Table instance for the created table.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>   * @throws IOException<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>   */<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      throws IOException {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span><a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>  /**<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>   * Create a table.<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>   * @param tableName the table name<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>   * @param families the families<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>   * @param splitKeys the splitkeys<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * @param replicaCount the region replica count<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   * @return A Table instance for the created table.<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>   * @throws IOException throws IOException<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>   */<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      int replicaCount) throws IOException {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      new Configuration(getConfiguration()));<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span><a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    // should wait until they are assigned<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return getConnection().getTable(tableName);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /**<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Create a table.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   * @param c Configuration to use<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>   * @return A Table instance for the created table.<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>   */<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    throws IOException {<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    return createTable(htd, families, null, c);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>  }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span><a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>  /**<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>   * Create a table.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>   * @param htd table descriptor<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>   * @param families array of column families<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>   * @param splitKeys array of split keys<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>   * @param c Configuration to use<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   * @return A Table instance for the created table.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      Configuration c) throws IOException {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // on is interfering.<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>  /**<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   * Create a table.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>   * @param htd table descriptor<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   * @param families array of column families<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>   * @param splitKeys array of split keys<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>   * @param type Bloom type<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>   * @param blockSize block size<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>   * @param c Configuration to use<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>   * @return A Table instance for the created table.<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>   * @throws IOException if getAdmin or createTable fails<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>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    for (byte[] family : families) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        .setBloomFilterType(type)<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>        .setBlocksize(blockSize);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>          cfdb.setNewVersionBehavior(true);<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      builder.setColumnFamily(cfdb.build());<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    TableDescriptor td = builder.build();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    if (splitKeys != null) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      getAdmin().createTable(td, splitKeys);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    } else {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      getAdmin().createTable(td);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    // we should wait until they are assigned<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    return getConnection().getTable(td.getTableName());<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>  }<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>  /**<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   * Create a table.<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>   * @param htd table descriptor<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>   * @param splitRows array of split keys<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>   * @return A Table instance for the created table.<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>   * @throws IOException<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>   */<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      throws IOException {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>           .setNewVersionBehavior(true).build());<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    if (splitRows != null) {<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    } else {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      getAdmin().createTable(builder.build());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    // we should wait until they are assigned<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    return getConnection().getTable(htd.getTableName());<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>  }<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span><a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>  /**<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * Create a table.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * @param tableName the table name<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   * @param families the families<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @param splitKeys the split keys<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   * @param replicaCount the replica count<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>   * @param c Configuration to use<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>   * @return A Table instance for the created table.<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>   */<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    TableDescriptor htd =<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>    return createTable(htd, families, splitKeys, c);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>  }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span><a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  /**<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   * Create a table.<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>   * @return A Table instance for the created table.<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>  }<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span><a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  /**<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>   * Create a table.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>   * @return A Table instance for the created table.<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>   */<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      throws IOException {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>  }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  /**<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>   * Create a table.<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>   * @return A Table instance for the created table.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>   */<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      byte[][] splitKeys) throws IOException {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    for (byte[] family : families) {<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        .setMaxVersions(numVersions);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    }<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    if (splitKeys != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    } else {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      getAdmin().createTable(builder.build());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // assigned<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    return getConnection().getTable(tableName);<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>  }<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span><a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  /**<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>   * Create a table with multiple regions.<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>   * @return A Table instance for the created table.<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>   */<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      throws IOException {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>  }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span><a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>  /**<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>   * Create a table.<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * @return A Table instance for the created table.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   */<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    int numVersions, int blockSize) throws IOException {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    for (byte[] family : families) {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      }<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    getAdmin().createTable(builder.build());<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    // assigned<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    return getConnection().getTable(tableName);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span><a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    for (byte[] family : families) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      }<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>    }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    if (cpName != null) {<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      builder.setCoprocessor(cpName);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    }<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    getAdmin().createTable(builder.build());<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    // assigned<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    return getConnection().getTable(tableName);<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>  }<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span><a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  /**<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>   * Create a table.<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>   * @return A Table instance for the created table.<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>   */<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    throws IOException {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    int i = 0;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>    for (byte[] family : families) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>      }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      i++;<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    getAdmin().createTable(builder.build());<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    // assigned<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>   * Create a table.<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>   * @return A Table instance for the created table.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>   */<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    throws IOException {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    // assigned<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    return getConnection().getTable(tableName);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span><a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>  /**<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>   * Create a table with multiple regions.<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>   * @return A Table instance for the created table.<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>   */<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>  }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span><a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  /**<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>   * Modify a table, synchronous.<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  @Deprecated<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      throws IOException, InterruptedException {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    admin.modifyTable(desc);<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>  }<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>   * Set the number of Region replicas.<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    throws IOException, InterruptedException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      .setRegionReplication(replicaCount).build();<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    admin.modifyTable(desc);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  /**<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>   * Drop an existing table<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>   * @param tableName existing table<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>   */<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    try {<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      getAdmin().disableTable(tableName);<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>    } catch (TableNotEnabledException e) {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    getAdmin().deleteTable(tableName);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>  }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span><a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  /**<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>   * Drop an existing table<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>   * @param tableName existing table<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>   */<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    try {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      deleteTable(tableName);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>    } catch (TableNotFoundException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      // ignore<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>  // ==========================================================================<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>  // Canned table and table descriptor creation<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span><a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  private static final int MAXVERSIONS = 3;<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  public static final char FIRST_CHAR = 'a';<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  public static final char LAST_CHAR = 'z';<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>  }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>    return builder.build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  }<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span><a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    return builder;<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>   * @param name Name to give table.<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>   * @return Column descriptor.<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>   */<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  }<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span><a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    int maxVersions) {<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    for (byte[] family : families) {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>      }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    return builder.build();<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>  }<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span><a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>  /**<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * @param startKey the start boundary of the region<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * @param endKey the end boundary of the region<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * @return a region that writes to local dir for testing<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   */<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    throws IOException {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      .setEndKey(endKey).build();<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>    return createLocalHRegion(hri, desc);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  }<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span><a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>  /**<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>  /**<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>   * @param info regioninfo<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>   * @param conf configuration<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>   * @param desc table descriptor<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>   * @param wal wal for this region.<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>   * @return created hregion<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>   * @throws IOException<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>   */<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      WAL wal) throws IOException {<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>  }<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>  /**<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>   * @param tableName<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>   * @param startKey<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>   * @param stopKey<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>   * @param isReadOnly<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>   * @param families<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>   * @return A region on which you must call<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>   * @throws IOException<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>   */<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      throws IOException {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        durability, wal, null, families);<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>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    builder.setReadOnly(isReadOnly);<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    int i = 0;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    for (byte[] family : families) {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      } else {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span><a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      }<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      i++;<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      // Set default to be three versions.<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    builder.setDurability(durability);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    RegionInfo info =<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span><a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  //<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  // ==========================================================================<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span><a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  /**<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>   * Provide an existing table name to truncate.<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>   * Scans the table and issues a delete for each row read.<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>   * @param tableName existing table<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>   * @return HTable to that new table<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>   * @throws IOException<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>   */<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    Table table = getConnection().getTable(tableName);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    Scan scan = new Scan();<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    for(Result res : resScan) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      Delete del = new Delete(res.getRow());<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      table.delete(del);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    resScan = table.getScanner(scan);<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    resScan.close();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    return table;<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>  }<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span><a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  /**<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * Truncate a table using the admin command.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   * @param tableName table which must exist.<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param preserveRegions keep the existing split points<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @return HTable for the new table<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   */<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>      IOException {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    Admin admin = getAdmin();<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      admin.disableTable(tableName);<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    return getConnection().getTable(tableName);<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>  }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span><a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  /**<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>   * Truncate a table using the admin command.<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * For previous behavior of issuing row deletes, see<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * deleteTableData.<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * Expressly does not preserve regions of existing table.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   * @param tableName table which must exist.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>   * @return HTable for the new table<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>   */<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    return truncateTable(tableName, false);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * @param t Table<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * @param f Family<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   * @return Count of rows loaded.<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>   * @throws IOException<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>   */<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    return loadTable(t, new byte[][] {f});<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>  }<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>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>   * @param t Table<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>   * @param f Family<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>   * @return Count of rows loaded.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>   * @throws IOException<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>   */<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span><a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>  /**<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>   * @param t Table<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>   * @param f Array of Families to load<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>   * @return Count of rows loaded.<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>   * @throws IOException<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>   */<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    return loadTable(t, f, null);<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  }<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span><a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  /**<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>   * @param t Table<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>   * @param f Array of Families to load<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>   * @return Count of rows loaded.<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>   * @throws IOException<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>   */<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    return loadTable(t, f, value, true);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span><a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>  /**<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   * @param t Table<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>   * @param f Array of Families to load<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>   * @return Count of rows loaded.<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>   * @throws IOException<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>   */<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      boolean writeToWAL) throws IOException {<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      Put put = new Put(row);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        byte[] value1 = value != null ? value : row;<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>        put.addColumn(f[i], f[i], value1);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      puts.add(put);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>    t.put(puts);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    return puts.size();<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span><a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  /** A tracker for tracking and validating table rows<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  public static class SeenRowTracker {<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>    int dim = 'z' - 'a' + 1;<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    byte[] startRow;<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    byte[] stopRow;<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>      this.startRow = startRow;<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>      this.stopRow = stopRow;<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    }<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span><a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    void reset() {<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      for (byte[] row : ROWS) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>      }<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span><a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    int i(byte b) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>      return b - 'a';<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span><a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    public void addRow(byte[] row) {<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    }<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>     * all other rows none<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>     */<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    public void validate() {<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>            int expectedCount = 0;<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>              expectedCount = 1;<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>            }<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>            if (count != expectedCount) {<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>                  "instead of " + expectedCount);<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>            }<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>          }<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        }<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<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>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    return loadRegion(r, f, false);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    return loadRegion((HRegion)r, f);<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span><a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>   * @param r Region<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>   * @param f Family<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>   * @param flush flush the cache if true<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>   * @return Count of rows loaded.<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>   * @throws IOException<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>   */<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>  throws IOException {<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    byte[] k = new byte[3];<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    int rowCount = 0;<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>          k[0] = b1;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>          k[1] = b2;<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>          k[2] = b3;<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          Put put = new Put(k);<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>          put.addColumn(f, null, k);<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>          if (r.getWAL() == null) {<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>          }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>          int preRowCount = rowCount;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>          int pause = 10;<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          int maxPause = 1000;<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>          while (rowCount == preRowCount) {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>            try {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>              r.put(put);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>              rowCount++;<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>            } catch (RegionTooBusyException e) {<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>              Threads.sleep(pause);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>            }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>      }<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      if (flush) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>        r.flush(true);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>    }<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return rowCount;<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      throws IOException {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      Put put = new Put(data);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      put.addColumn(f, null, data);<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>      t.put(put);<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      throws IOException {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    Random r = new Random();<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    byte[] row = new byte[rowSize];<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      r.nextBytes(row);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>      Put put = new Put(row);<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      t.put(put);<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span><a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      int replicaId)<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>      throws IOException {<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      Get get = new Get(data);<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      get.setReplicaId(replicaId);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      Result result = table.get(get);<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      assertTrue(failMsg,<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          cell.getValueLength()));<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    }<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  }<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span><a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      throws IOException {<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      final boolean present) throws IOException {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      final boolean present) throws IOException {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      Result result = region.get(new Get(data));<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span><a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      if (!present) continue;<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span><a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      assertTrue(failMsg,<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>          cell.getValueLength()));<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>    }<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>  }<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span><a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      throws IOException {<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      Delete delete = new Delete(data);<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      delete.addFamily(f);<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      t.delete(delete);<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>    }<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>  }<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span><a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>  /**<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>   * Return the number of rows in the given table.<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>   * @param table to count rows<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>   * @return count of rows<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   */<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>  public static int countRows(final Table table) throws IOException {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>    return countRows(table, new Scan());<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>  }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      int count = 0;<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      while (results.next() != null) {<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        count++;<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>      }<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>      return count;<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>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    Scan scan = new Scan();<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    for (byte[] family: families) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>      scan.addFamily(family);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    }<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return countRows(table, scan);<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  /**<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>   * Return the number of rows in the given table.<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>   */<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    Table table = getConnection().getTable(tableName);<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    try {<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      return countRows(table);<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      table.close();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>  }<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span><a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>  public int countRows(final Region region) throws IOException {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    return countRows(region, new Scan());<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span><a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    try {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      return countRows(scanner);<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>    } finally {<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>      scanner.close();<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    }<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>  }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>    int scannedCount = 0;<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>    boolean hasMore = true;<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>    while (hasMore) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>      hasMore = scanner.next(results);<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      scannedCount += results.size();<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>      results.clear();<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>    return scannedCount;<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  }<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span><a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>  /**<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>   */<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span><a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    Scan scan = new Scan();<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    ResultScanner results = table.getScanner(scan);<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>    for (Result res : results) {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>      digest.update(res.getRow());<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>    }<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>    results.close();<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>    return digest.toString();<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>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>  static {<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>    int i = 0;<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          ROWS[i][0] = b1;<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>          ROWS[i][1] = b2;<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>          ROWS[i][2] = b3;<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>          i++;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        }<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      }<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span><a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  public static final byte[][] KEYS = {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<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>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      Bytes.toBytes("bbb"),<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  };<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span><a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>  /**<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>   * want to form a proper range of regions.<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>   * @param conf<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>   * @param htd<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>   * @param startKeys<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>   * @return list of region info for regions added to meta<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>   * @throws IOException<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>   */<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>  throws IOException {<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    MetaTableAccessor<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    // add custom ones<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      int j = (i + 1) % startKeys.length;<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>          .setStartKey(startKeys[i])<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>          .setEndKey(startKeys[j])<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>          .build();<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>      newRegions.add(hri);<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span><a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    meta.close();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>    return newRegions;<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  }<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span><a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  /**<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>   */<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>      throws IOException {<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>    // unless I pass along via the conf.<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>  }<a name="line.2508"></a>
 <span class="sourceLineNo">2509</span><a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  /**<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   */<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  /**<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   */<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws IOException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    region.setBlockCache(blockCache);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>    region.initialize();<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>   */<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      throws IOException {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>    region.setMobFileCache(mobFileCache);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    region.initialize();<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>    return region;<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>  }<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span><a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>  /**<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>   */<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      throws IOException {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>  }<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span><a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>  /**<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   * Returns all rows from the hbase:meta table.<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>   *<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>   * @throws IOException When reading the rows fails.<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>   */<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>    for (Result result : s) {<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      rows.add(result.getRow());<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>    }<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>    s.close();<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>    t.close();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>    return rows;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>  }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  /**<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>   *<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>   * @throws IOException When reading the rows fails.<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>   */<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    for (Result result : s) {<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      if (info == null) {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        // TODO figure out what to do for this new hosed case.<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      if (info.getTable().equals(tableName)) {<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        rows.add(result.getRow());<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    s.close();<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    t.close();<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>    return rows;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>  }<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span><a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>  /**<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>   * Returns all regions of the specified table<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>   *<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>   * @param tableName the table name<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>   * @return all regions of the specified table<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>   * @throws IOException when getting the regions fails.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>   */<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      return admin.getRegions(tableName);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>  }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span><a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>  /*<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>   * @param rs<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>   * @return another region server<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>   */<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        return rst.getRegionServer();<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      }<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    return null;<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>  /**<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>   * Tool to get the reference to the region server object that holds the<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>   * region of the specified user table.<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>   * @throws IOException<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @throws InterruptedException<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      throws IOException, InterruptedException {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>    if (regions == null || regions.isEmpty()) {<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      return null;<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>    }<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>        tableName);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    byte[] firstRegionName = regions.stream()<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>        .filter(r -&gt; !r.isOffline())<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        .map(RegionInfo::getRegionName)<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        .findFirst()<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>    while(retrier.shouldRetry()) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      if (index != -1) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      retrier.sleepUntilNextRetry();<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    }<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return null;<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span><a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   *<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @throws IOException When starting the cluster fails.<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   */<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    conf.setIfUnset(<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        "99.0");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    startMiniMapReduceCluster(2);<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    return mrCluster;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  }<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span><a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>  /**<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>   * will not change its internal static LOG_DIR variable.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>   */<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>  private void forceChangeTaskLogDir() {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>    Field logDirField;<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>    try {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      logDirField.setAccessible(true);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span><a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      modifiersField.setAccessible(true);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>    } catch (SecurityException e) {<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>      throw new RuntimeException(e);<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>    } catch (NoSuchFieldException e) {<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      throw new RuntimeException(e);<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>    } catch (IllegalArgumentException e) {<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>      throw new RuntimeException(e);<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    } catch (IllegalAccessException e) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      throw new RuntimeException(e);<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>  }<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span><a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>  /**<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>   * filesystem.<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>   * @throws IOException When starting the cluster fails.<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>   */<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    if (mrCluster != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>    }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>    setupClusterTestDir();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>    createDirsAndSetProperties();<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span><a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>    forceChangeTaskLogDir();<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>    //// hadoop2 specific settings<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>    // we up the VM usable so that processes don't get killed.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span><a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    ////<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span><a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      null, null, new JobConf(this.conf));<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    if (jobConf == null) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      jobConf = mrCluster.createJobConf();<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span><a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span><a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>    // this for mrv2 support; mr1 ignores this<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>    if (rmAddress != null) {<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>    }<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>    if (historyAddress != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    }<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    String schedulerAddress =<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    if (schedulerAddress != null) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    String mrJobHistoryWebappAddress =<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    String yarnRMWebappAddress =<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>    if (yarnRMWebappAddress != null) {<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>    }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>  }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span><a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>  /**<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>   */<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    if (mrCluster != null) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      mrCluster.shutdown();<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>      mrCluster = null;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>    }<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Restore configuration to point to local jobtracker<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    conf.set("mapreduce.jobtracker.address", "local");<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>  /**<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>   */<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return createMockRegionServerService((ServerName)null);<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  /**<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>   * This version is used by TestTokenAuthentication<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      IOException {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>    rss.setRpcServer(rpc);<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return rss;<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  /**<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>   * This version is used by TestOpenRegionHandler<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   */<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>    return rss;<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span><a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  /**<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   */<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>  @Deprecated<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    Log4jUtils.enableDebug(clazz);<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  /**<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>   * Expire the Master's session<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>   * @throws Exception<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  public void expireMasterSession() throws Exception {<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>    expireSession(master.getZooKeeper(), false);<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>  }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span><a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  /**<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   * Expire a region server's session<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>   * @param index which RS<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>   */<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    decrementMinRegionServerCount();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  }<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span><a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  private void decrementMinRegionServerCount() {<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    // this.hbaseCluster shares this configuration too<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span><a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>    // each master thread keeps a copy of configuration<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<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><a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    int currentCount = conf.getInt(<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>    if (currentCount != -1) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>          Math.max(currentCount - 1, 1));<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>  }<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span><a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>   expireSession(nodeZK, false);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>  }<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span><a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  /**<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>   * There are issues when doing this:<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>   *<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>   *                    current configuration.<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>   */<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    throws Exception {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    Configuration c = new Configuration(this.conf);<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    byte[] password = zk.getSessionPasswd();<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>    long sessionID = zk.getSessionId();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    //  so we create a first watcher to be sure that the<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    //  other watchers on the same machine will get is as well.<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>    //  closing the connection should be enough.<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>      @Override<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    } , sessionID, password);<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span><a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    // Making it expire<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span><a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    while (newZK.getState() != States.CONNECTED<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>       Thread.sleep(1);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>    newZK.close();<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span><a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>    monitor.close();<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span><a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    if (checkStatus) {<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    }<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>  }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  /**<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>   * Get the Mini HBase cluster.<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>   *<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * @return hbase cluster<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * @see #getHBaseClusterInterface()<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   */<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    return getMiniHBaseCluster();<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  }<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  /**<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>   * Returns the HBaseCluster instance.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>   * need to type-cast.<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>   */<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    //but this would require refactoring 90+ calls.<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    return hbaseCluster;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  /**<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>   * the connection is not valid anymore.<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>   */<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>  public void invalidateConnection() throws IOException {<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    closeConnection();<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    // Update the master addresses if they changed.<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>        masterConfigBefore, masterConfAfter);<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  }<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>   * Get a shared Connection to the cluster.<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>   * this method is thread safe.<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>   */<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public Connection getConnection() throws IOException {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return getAsyncConnection().toConnection();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * Get a assigned Connection to the cluster.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * this method is thread safe.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * @param user assigned user<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * @return A Connection with assigned user.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Connection getConnection(User user) throws IOException {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    return getAsyncConnection(user).toConnection();<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>  /**<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>   * this method is thread safe.<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>   */<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>    try {<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        if (connection == null) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>          try {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>            connection = getAsyncConnection(user);<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>          } catch(IOException ioe) {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>          }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        }<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>        return connection;<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>      });<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    } catch (UncheckedIOException exception) {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>      throw exception.getCause();<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    }<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  }<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>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>   * this method is thread safe.<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>   * @param user assigned user<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>   */<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  }<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span><a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  public void closeConnection() throws IOException {<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    if (hbaseAdmin != null) {<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>      Closeables.close(hbaseAdmin, true);<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>      hbaseAdmin = null;<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    if (asyncConnection != null) {<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>      Closeables.close(asyncConnection, true);<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><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>    if (hbaseAdmin == null){<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    }<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return hbaseAdmin;<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>  private Admin hbaseAdmin = null;<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span><a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  /**<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   */<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public Hbck getHbck() throws IOException {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    return getConnection().getHbck();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span><a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>  /**<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>   * Unassign the named region.<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   *<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   * @param regionName  The region to unassign.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>   */<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    unassignRegion(Bytes.toBytes(regionName));<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>  }<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>   * Unassign the named region.<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>   *<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>   * @param regionName  The region to unassign.<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>   */<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    getAdmin().unassign(regionName, true);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  }<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  /**<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>   * Closes the region containing the given row.<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>   *<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @param row  The row to find the containing region.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param table  The table to find the region.<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>  }<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span><a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>  /**<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   * Closes the region containing the given row.<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>   *<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>   * @param row  The row to find the containing region.<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>   * @param table  The table to find the region.<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>   * @throws IOException<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>   */<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>  }<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span><a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  /**<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * Retrieves a splittable region randomly from tableName<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * @param tableName name of table<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>   */<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>    int regCount = regions.size();<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>    int idx;<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    int attempts = 0;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>    do {<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      if (regCount != regions.size()) {<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>        // if there was region movement, clear attempted Set<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>        attempted.clear();<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>      }<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      regCount = regions.size();<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>      if (regCount &gt; 0) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>        idx = random.nextInt(regCount);<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        // if we have just tried this region, there is no need to try again<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        if (attempted.contains(idx)) {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>          continue;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>        }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>        HRegion region = regions.get(idx);<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>        if (region.checkSplit().isPresent()) {<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>          return region;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>        attempted.add(idx);<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      }<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>      attempts++;<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return null;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    return dfsCluster;<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span><a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>    setDFSCluster(cluster, true);<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  }<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span><a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>  /**<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * Set the MiniDFSCluster<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param cluster cluster to use<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   * it is set.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>   */<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>      throws IllegalStateException, IOException {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>    this.dfsCluster = cluster;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>    this.setFs();<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    return HFileSystem.get(conf);<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  }<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span><a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>  /**<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>   * (30 seconds).<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>   * @param table Table to wait on.<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>   * @throws InterruptedException<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>   * @throws IOException<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>   */<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  public void waitTableAvailable(TableName table)<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      throws InterruptedException, IOException {<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span><a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>      throws InterruptedException, IOException {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>  }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span><a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>  /**<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>   * Wait until all regions in a table have been assigned<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>   * @param table Table to wait on.<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>   * @param timeoutMillis Timeout.<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>   */<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>      throws InterruptedException, IOException {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>  }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span><a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        .getRegionStates().getRegionAssignments();<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        ServerName sn = metaLocation.getSecond();<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        if (!assignments.containsKey(hri)) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span><a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        } else if (sn == null) {<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>        }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>      }<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>    }<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>      throws IOException {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    if (tableState == null) {<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } else if (!tableState.inStates(state)) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>    } else {<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>      return "TableState in META: OK";<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>    }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>  }<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span><a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>  @Nullable<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>      @Override<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>      public boolean visit(Result r) throws IOException {<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>          return false;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>        }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>        if (state != null) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>          lastTableState.set(state);<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>        }<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>        return true;<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>      }<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>    };<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>    return lastTableState.get();<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>  }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span><a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>  /**<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>   * Tolerates nonexistent table.<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>   * @param table the table to wait on.<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>   * @throws IOException if an IO problem is encountered<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>   */<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>  public void waitTableEnabled(TableName table)<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      throws InterruptedException, IOException {<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    waitTableEnabled(table, 30000);<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>  }<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span><a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>  /**<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * regions have been all assigned.<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>   * @param table Table to wait on.<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>   * @throws InterruptedException<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>   * @throws IOException<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>   */<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>  throws InterruptedException, IOException {<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>  throws IOException {<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>  }<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span><a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>  /**<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>   * Will timeout after default period (30 seconds)<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>   * @param table Table to wait on.<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>   * @throws InterruptedException<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>   * @throws IOException<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>   */<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>  public void waitTableDisabled(byte[] table)<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>          throws InterruptedException, IOException {<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>    waitTableDisabled(table, 30000);<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>  }<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span><a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>          throws InterruptedException, IOException {<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>  }<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span><a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  /**<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>   * @param table Table to wait on.<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @throws InterruptedException<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   * @throws IOException<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>   */<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>          throws InterruptedException, IOException {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>  /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * Make sure that at least the specified number of region servers<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   * are running<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   * @param num minimum number of region servers that should be running<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>   * @return true if we started some servers<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>   * @throws IOException<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>   */<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>      throws IOException {<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>    boolean startedServer = false;<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>      startedServer = true;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>    }<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span><a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>    return startedServer;<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>  }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span><a name="line.3339"></a>
+<span class="sourceLineNo">2510</span><a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  /**<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>   */<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>  }<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span><a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>  /**<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>   */<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      throws IOException {<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>    region.setBlockCache(blockCache);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    region.initialize();<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>   */<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      throws IOException {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>    region.setMobFileCache(mobFileCache);<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>    region.initialize();<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    return region;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>  }<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span><a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>  /**<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>   */<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      throws IOException {<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>  }<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span><a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>  /**<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>   * Returns all rows from the hbase:meta table.<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   *<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @throws IOException When reading the rows fails.<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   */<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>    for (Result result : s) {<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      rows.add(result.getRow());<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    }<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>    s.close();<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>    t.close();<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>    return rows;<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  }<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span><a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  /**<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>   *<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * @throws IOException When reading the rows fails.<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   */<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    for (Result result : s) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>      if (info == null) {<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>        // TODO figure out what to do for this new hosed case.<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>        continue;<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span><a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      if (info.getTable().equals(tableName)) {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>        rows.add(result.getRow());<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      }<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    s.close();<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>    t.close();<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>    return rows;<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  }<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span><a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>  /**<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>   * Returns all regions of the specified table<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>   *<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>   * @param tableName the table name<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>   * @return all regions of the specified table<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * @throws IOException when getting the regions fails.<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   */<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      return admin.getRegions(tableName);<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>  }<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span><a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>  /*<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>   * @param rs<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>   * @return another region server<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>   */<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>        return rst.getRegionServer();<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>      }<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>    }<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    return null;<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>  }<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>  /**<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>   * Tool to get the reference to the region server object that holds the<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>   * region of the specified user table.<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>   * @throws IOException<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>   * @throws InterruptedException<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>   */<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      throws IOException, InterruptedException {<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (regions == null || regions.isEmpty()) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      return null;<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    }<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        tableName);<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span><a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    byte[] firstRegionName = regions.stream()<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        .filter(r -&gt; !r.isOffline())<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>        .map(RegionInfo::getRegionName)<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>        .findFirst()<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    while(retrier.shouldRetry()) {<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      if (index != -1) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      retrier.sleepUntilNextRetry();<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    return null;<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  /**<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   *<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   * @throws IOException When starting the cluster fails.<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    conf.setIfUnset(<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>        "99.0");<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    startMiniMapReduceCluster(2);<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>    return mrCluster;<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>  }<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span><a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>  /**<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * will not change its internal static LOG_DIR variable.<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  private void forceChangeTaskLogDir() {<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>    Field logDirField;<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    try {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>      logDirField.setAccessible(true);<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      modifiersField.setAccessible(true);<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>    } catch (SecurityException e) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>      throw new RuntimeException(e);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>    } catch (NoSuchFieldException e) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>      throw new RuntimeException(e);<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    } catch (IllegalArgumentException e) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      throw new RuntimeException(e);<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    } catch (IllegalAccessException e) {<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>      throw new RuntimeException(e);<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>    }<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>  }<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span><a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>  /**<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>   * filesystem.<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>   * @throws IOException When starting the cluster fails.<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>   */<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>    if (mrCluster != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>    }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>    setupClusterTestDir();<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>    createDirsAndSetProperties();<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    forceChangeTaskLogDir();<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span><a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>    //// hadoop2 specific settings<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    // we up the VM usable so that processes don't get killed.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span><a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>    ////<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span><a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>      null, null, new JobConf(this.conf));<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>    if (jobConf == null) {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>      jobConf = mrCluster.createJobConf();<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    }<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span><a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span><a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    // this for mrv2 support; mr1 ignores this<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (rmAddress != null) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    if (historyAddress != null) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>    String schedulerAddress =<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>    if (schedulerAddress != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    }<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>    String mrJobHistoryWebappAddress =<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>    }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    String yarnRMWebappAddress =<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    if (yarnRMWebappAddress != null) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>  }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span><a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>  /**<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   */<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>    if (mrCluster != null) {<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      mrCluster.shutdown();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      mrCluster = null;<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>    }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>    // Restore configuration to point to local jobtracker<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    conf.set("mapreduce.jobtracker.address", "local");<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>  }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span><a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>  /**<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>   */<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return createMockRegionServerService((ServerName)null);<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   * This version is used by TestTokenAuthentication<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>   */<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>      IOException {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    rss.setRpcServer(rpc);<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return rss;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  /**<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>   * This version is used by TestOpenRegionHandler<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>   */<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return rss;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>   */<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>  @Deprecated<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>    Log4jUtils.enableDebug(clazz);<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span><a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>  /**<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * Expire the Master's session<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   * @throws Exception<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>   */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>  public void expireMasterSession() throws Exception {<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    expireSession(master.getZooKeeper(), false);<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>  }<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>   * Expire a region server's session<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @param index which RS<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>    decrementMinRegionServerCount();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span><a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>  private void decrementMinRegionServerCount() {<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>    // this.hbaseCluster shares this configuration too<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>    // each master thread keeps a copy of configuration<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>    }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  }<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span><a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>    int currentCount = conf.getInt(<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    if (currentCount != -1) {<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>          Math.max(currentCount - 1, 1));<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    }<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span><a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>   expireSession(nodeZK, false);<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>  }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  /**<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   * There are issues when doing this:<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>   *<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>   *                    current configuration.<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   */<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    throws Exception {<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>    Configuration c = new Configuration(this.conf);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>    byte[] password = zk.getSessionPasswd();<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    long sessionID = zk.getSessionId();<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span><a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    //  so we create a first watcher to be sure that the<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    //  other watchers on the same machine will get is as well.<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    //  closing the connection should be enough.<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>      @Override<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>      }<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    } , sessionID, password);<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span><a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    // Making it expire<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span><a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    while (newZK.getState() != States.CONNECTED<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>       Thread.sleep(1);<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    }<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>    newZK.close();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span><a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>    monitor.close();<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>    if (checkStatus) {<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>  }<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>   * Get the Mini HBase cluster.<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>   *<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return hbase cluster<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   * @see #getHBaseClusterInterface()<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    return getMiniHBaseCluster();<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>  }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>  /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>   * Returns the HBaseCluster instance.<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>   * need to type-cast.<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   */<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    //but this would require refactoring 90+ calls.<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    return hbaseCluster;<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>  }<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>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>   * the connection is not valid anymore.<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public void invalidateConnection() throws IOException {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    closeConnection();<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    // Update the master addresses if they changed.<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>        masterConfigBefore, masterConfAfter);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<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>  /**<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   * Get a shared Connection to the cluster.<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * this method is thread safe.<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   */<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public Connection getConnection() throws IOException {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return getAsyncConnection().toConnection();<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * Get a assigned Connection to the cluster.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   * this method is thread safe.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>   * @param user assigned user<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>   * @return A Connection with assigned user.<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>   */<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>  public Connection getConnection(User user) throws IOException {<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    return getAsyncConnection(user).toConnection();<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   * this method is thread safe.<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    try {<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>        if (connection == null) {<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>          try {<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>            connection = getAsyncConnection(user);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>          } catch(IOException ioe) {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>          }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        }<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>        return connection;<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>      });<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>    } catch (UncheckedIOException exception) {<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>      throw exception.getCause();<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    }<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>  /**<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>   * this method is thread safe.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>   * @param user assigned user<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>   */<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  public void closeConnection() throws IOException {<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>    if (hbaseAdmin != null) {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>      Closeables.close(hbaseAdmin, true);<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>      hbaseAdmin = null;<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>    if (asyncConnection != null) {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>      Closeables.close(asyncConnection, true);<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span><a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>  /**<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    if (hbaseAdmin == null){<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>    }<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>    return hbaseAdmin;<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  }<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span><a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  private Admin hbaseAdmin = null;<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  public Hbck getHbck() throws IOException {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return getConnection().getHbck();<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span><a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>   * Unassign the named region.<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>   *<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>   * @param regionName  The region to unassign.<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>   */<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>    unassignRegion(Bytes.toBytes(regionName));<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>  /**<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>   * Unassign the named region.<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>   *<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>   * @param regionName  The region to unassign.<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>   */<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    getAdmin().unassign(regionName, true);<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>  }<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span><a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>  /**<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>   * Closes the region containing the given row.<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>   *<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>   * @param row  The row to find the containing region.<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>   * @param table  The table to find the region.<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>   */<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>  }<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>   * Closes the region containing the given row.<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>   *<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>   * @param row  The row to find the containing region.<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>   * @param table  The table to find the region.<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>   * @throws IOException<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>   */<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Retrieves a splittable region randomly from tableName<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * @param tableName name of table<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>   */<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>    int regCount = regions.size();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>    int idx;<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    int attempts = 0;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    do {<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>      if (regCount != regions.size()) {<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>        // if there was region movement, clear attempted Set<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>        attempted.clear();<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>      }<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>      regCount = regions.size();<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>      if (regCount &gt; 0) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>        idx = random.nextInt(regCount);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>        // if we have just tried this region, there is no need to try again<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>        if (attempted.contains(idx)) {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>          continue;<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>        }<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        HRegion region = regions.get(idx);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        if (region.checkSplit().isPresent()) {<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>          return region;<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>        }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>        attempted.add(idx);<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>      attempts++;<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    return null;<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  }<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span><a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>    return dfsCluster;<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>  }<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    setDFSCluster(cluster, true);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span><a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>  /**<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>   * Set the MiniDFSCluster<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>   * @param cluster cluster to use<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>   * it is set.<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>   */<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>      throws IllegalStateException, IOException {<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>    }<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    this.dfsCluster = cluster;<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>    this.setFs();<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>  }<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span><a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    return HFileSystem.get(conf);<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>  /**<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>   * (30 seconds).<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>   * @param table Table to wait on.<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>   * @throws InterruptedException<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>   * @throws IOException<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>   */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>  public void waitTableAvailable(TableName table)<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>      throws InterruptedException, IOException {<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>  }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      throws InterruptedException, IOException {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span><a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  /**<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>   * Wait until all regions in a table have been assigned<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>   * @param table Table to wait on.<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>   * @param timeoutMillis Timeout.<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>   */<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>      throws InterruptedException, IOException {<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<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>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        .getRegionStates().getRegionAssignments();<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>        ServerName sn = metaLocation.getSecond();<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>        if (!assignments.containsKey(hri)) {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span><a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>        } else if (sn == null) {<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>        }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>      }<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    }<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>      throws IOException {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>    if (tableState == null) {<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    } else if (!tableState.inStates(state)) {<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>    } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>      return "TableState in META: OK";<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>    }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>  }<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span><a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>  @Nullable<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>      @Override<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>      public boolean visit(Result r) throws IOException {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>          return false;<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>        }<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>        if (state != null) {<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>          lastTableState.set(state);<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>        }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>        return true;<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>      }<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>    };<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>    return lastTableState.get();<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>  }<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span><a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>  /**<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * Tolerates nonexistent table.<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   * @param table the table to wait on.<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @throws IOException if an IO problem is encountered<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   */<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>  public void waitTableEnabled(TableName table)<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>      throws InterruptedException, IOException {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    waitTableEnabled(table, 30000);<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  }<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span><a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>  /**<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>   * regions have been all assigned.<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>   * @param table Table to wait on.<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>   * @throws InterruptedException<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>   * @throws IOException<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>   */<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>  throws InterruptedException, IOException {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>  }<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span><a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>  throws IOException {<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>  }<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span><a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>  /**<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>   * Will timeout after default period (30 seconds)<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>   * @param table Table to wait on.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>   * @throws InterruptedException<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>   * @throws IOException<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>   */<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>  public void waitTableDisabled(byte[] table)<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>          throws InterruptedException, IOException {<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>    waitTableDisabled(table, 30000);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>  }<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span><a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>          throws InterruptedException, IOException {<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span><a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>  /**<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>   * @param table Table to wait on.<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>   * @throws InterruptedException<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>   * @throws IOException<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>   */<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>          throws InterruptedException, IOException {<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  }<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span><a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>  /**<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>   * Make sure that at least the specified number of region servers<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>   * are running<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>   * @param num minimum number of region servers that should be running<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>   * @return true if we started some servers<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>   * @throws IOException<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>   */<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      throws IOException {<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    boolean startedServer = false;<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>      startedServer = true;<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>    }<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span><a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>    return startedServer;<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  }<a name="line.3339"></a>
 <span class="sourceLineNo">3340</span><a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>  /**<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * Make sure that at least the specified number of region servers<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * stopped.<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   * @param num minimum number of region servers that should be running<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>   * @return true if we started some servers<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>   * @throws IOException<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>   */<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    throws IOException {<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span><a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    int nonStoppedServers = 0;<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span><a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>      } else {<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>        nonStoppedServers++;<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>      }<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>    }<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      startedServer = true;<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    }<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return startedServer;<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
+<span class="sourceLineNo">3341</span><a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>  /**<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>   * Make sure that at least the specified number of region servers<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>   * stopped.<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>   * @param num minimum number of region servers that should be running<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>   * @return true if we started some servers<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>   * @throws IOException<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>   */<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>    throws IOException {<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    int nonStoppedServers = 0;<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span><a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      } else {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        nonStoppedServers++;<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      }<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>    }<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      startedServer = true;<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    return startedServer;<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>  }<a name="line.3370"></a>
 <span class="sourceLineNo">3371</span><a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>  /**<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>   * @param c Initial configuration<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>   * @return A new configuration instance with a different user set into it.<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>   * @throws IOException<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>   */<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>  public static User getDifferentUser(final Configuration c,<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>    final String differentiatingSuffix)<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>  throws IOException {<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>      return User.getCurrent();<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>    }<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>    String username = User.getCurrent().getName() +<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      differentiatingSuffix;<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>    User user = User.createUserForTesting(c, username,<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>        new String[]{"supergroup"});<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return user;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>      throws IOException {<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>      try {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>        for (RegionInfo region :<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>          online.add(region.getRegionNameAsString());<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>        }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>      } catch (RegionServerStoppedException e) {<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>        // That's fine.<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      }<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>    }<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>      try {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>        for (RegionInfo region :<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>          online.add(region.getRegionNameAsString());<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>        }<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>      } catch (RegionServerStoppedException e) {<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>        // That's fine.<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      } catch (ServerNotRunningYetException e) {<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>        // That's fine.<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>      }<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>    return online;<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  }<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  /**<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>   * &lt;pre&gt;<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * &lt;/pre&gt;<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   * @param max<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @throws NoSuchFieldException<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   * @throws SecurityException<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>   * @throws IllegalAccessException<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>   * @throws IllegalArgumentException<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>   */<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      final int max) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>    try {<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>        String className = clazz.getSimpleName();<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>        if (className.equals("DFSOutputStream")) {<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>          if (clazz.isInstance(stream)) {<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>            Field maxRecoveryErrorCountField =<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>            break;<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>          }<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>        }<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>      }<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>    } catch (Exception e) {<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>      LOG.info("Could not set max recovery field", e);<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  }<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span><a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>  /**<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * has completed assignment.<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * @return true if the region is assigned false otherwise.<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   */<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>      throws IOException, InterruptedException {<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>    am.assign(regionInfo);<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  /**<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>   *<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>   * @param destRegion region to move<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>   * @param destServer destination server of the region<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>   * @throws InterruptedException<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>   * @throws IOException<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>   */<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>      throws InterruptedException, IOException {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>    while (true) {<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>          .getRegionServerOfRegion(destRegion);<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>        break;<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      }<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>      Thread.sleep(10);<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>    }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>  }<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span><a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>  /**<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>   * This means all regions have been deployed,<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>   * server.<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>   * @param tableName the table name<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>   * @throws IOException<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>   */<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span><a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>   * Waith until all system table's regions get assigned<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>   * @throws IOException<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  }<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span><a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  /**<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>   * server.<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>   * @param tableName the table name<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>   * @param timeout timeout, in milliseconds<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>   * @throws IOException<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>   */<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>      throws IOException {<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>            timeout + "ms");<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>          @Override<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>          public String explainFailure() throws IOException {<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>            return explainTableAvailability(tableName);<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>          }<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span><a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>          @Override<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>          public boolean evaluate() throws IOException {<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>            Scan scan = new Scan();<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>            boolean tableFound = false;<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>                  // (for fault tolerance testing).<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>                  tableFound = true;<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>                  byte[] server =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>                  if (server == null) {<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>                    return false;<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>                  } else {<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>                    byte[] startCode =<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>                    ServerName serverName =<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>                            Bytes.toLong(startCode));<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>                      return false;<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>                    }<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>                  }<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>                    return false;<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>                  }<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>                }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>              }<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>            }<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>            if (!tableFound) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>            }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>            return tableFound;<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>          }<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>        });<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>      }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>    }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>    // check from the master state if we are using a mini cluster<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>      // returning -- sometimes this can lag.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>        @Override<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>        public String explainFailure() throws IOException {<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>          return explainTableAvailability(tableName);<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>        }<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span><a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>        @Override<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>        public boolean evaluate() throws IOException {<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>        }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>      });<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>    }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  }<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span><a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>  /**<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>   * Do a small get/scan against one store. This is required because store<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>   */<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>                                                Get get) throws IOException {<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>    Scan scan = new Scan(get);<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>        // readpoint 0.<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>        0);<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span><a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>    scanner.next(result);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    if (!result.isEmpty()) {<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>      // verify that we are on the row we want:<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>      Cell kv = result.get(0);<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>        result.clear();<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>      }<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    }<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>    scanner.close();<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    return result;<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  }<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span><a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  /**<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>   * Create region split keys between startkey and endKey<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>   *<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>   * @param startKey<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>   * @param endKey<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>   * @return resulting split keys<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    assertTrue(numRegions&gt;3);<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>    return result;<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>  }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>  /**<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>   * Do a small get/scan against one store. This is required because store<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>   */<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>                                                byte [] row,<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>                                                ) throws IOException {<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    Get get = new Get(row);<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span><a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>    return getFromStoreFile(store,get);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>  }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span><a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>    final int eLen = expected.size();<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>    final int aLen = actual.size();<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span><a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>    int i;<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>    for (i = 0; i &lt; minLen<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>        ++i) {}<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span><a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>    if (additionalMsg == null) {<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>      additionalMsg = "";<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>    }<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>    if (!additionalMsg.isEmpty()) {<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>      additionalMsg = ". " + additionalMsg;<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>    }<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span><a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    if (eLen != aLen || i != minLen) {<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>      throw new AssertionError(<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    }<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>      return lst.get(i).toString();<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>    } else {<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return "&lt;out_of_range&gt;";<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span><a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>  public String getClusterKey() {<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span><a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>  /** Creates a random table with the given parameters */<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  public Table createRandomTable(TableName tableName,<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      final Collection&lt;String&gt; families,<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>      final int maxVersions,<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      final int numColsPerRow,<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span>      final int numFlushes,<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>      final int numRegions,<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>      final int numRowsPerFlush)<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>      throws IOException, InterruptedException {<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span><a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>        "\n");<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span><a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>    final int numCF = families.size();<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>    {<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>      int cfIndex = 0;<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      for (String cf : families) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>      }<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    }<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span><a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    final int actualStartKey = 0;<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>    final String keyFormat = "%08x";<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>        maxVersions,<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        numRegions);<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span><a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>    if (hbaseCluster != null) {<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    }<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span><a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span><a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span><a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>        Put put = new Put(row);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>        Delete del = new Delete(row);<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>          final long ts = rand.nextInt();<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>          if (rand.nextBoolean()) {<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>                ts + "_random_" + rand.nextLong());<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>            put.addColumn(cf, qual, ts, value);<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>            del.addColumn(cf, qual, ts);<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>          } else {<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>            del.addColumns(cf, qual, ts);<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>          }<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>        }<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span><a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>        if (!put.isEmpty()) {<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>          mutator.mutate(put);<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>        }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>        if (!del.isEmpty()) {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>          mutator.mutate(del);<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>        }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>      mutator.flush();<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>      if (hbaseCluster != null) {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>    }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>    mutator.close();<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span><a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>    return table;<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span><a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>  public static int randomFreePort() {<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  public static String randomMultiCastAddress() {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    return "226.1.1." + random.nextInt(254);<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>  }<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span><a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>  public static void waitForHostPort(String host, int port)<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      throws IOException {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>    final int maxTimeMs = 10000;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>    IOException savedException = null;<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      try {<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>        sock.close();<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        savedException = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>        break;<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>      } catch (UnknownHostException e) {<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span>      } catch (IOException e) {<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>        savedException = e;<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>      }<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>    }<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span><a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>    if (savedException != null) {<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>      throw savedException;<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>    }<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>  }<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span><a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>  /**<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   * logs a warning and continues.<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * @return the number of regions the table was split into<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   */<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      Durability.USE_DEFAULT);<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>  }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>  /**<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>   * logs a warning and continues.<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>   * @return the number of regions the table was split into<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>   */<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>    builder.setDurability(durability);<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    builder.setRegionReplication(regionReplication);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>    cfBuilder.setCompressionType(compression);<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>      numRegionsPerServer);<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>  }<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span><a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>  /**<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>   * logs a warning and continues.<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>   * @return the number of regions the table was split into<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>   */<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>    builder.setDurability(durability);<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>    builder.setRegionReplication(regionReplication);<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>      cfBuilder.setCompressionType(compression);<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>      hcds[i] = cfBuilder.build();<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>    }<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>  }<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span><a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>  /**<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>   * logs a warning and continues.<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>   * @return the number of regions the table was split into<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>   */<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>  }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  /**<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>   * logs a warning and continues.<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>   * @return the number of regions the table was split into<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>   */<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span>        numRegionsPerServer);<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>  }<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span><a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>  /**<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span>   * logs a warning and continues.<a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>   * @return the number of regions the table was split into<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>   */<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span>      int numRegionsPerServer) throws IOException {<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>  }<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span><a name="line.3910"></a>
-<span class="sourceLineNo">3911</span>  /**<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>   * logs a warning and continues.<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>   * @return the number of regions the table was split into<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>   */<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>        builder.setColumnFamily(cd);<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>      }<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>    }<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>    td = builder.build();<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span>    int totalNumberOfRegions = 0;<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span><a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    try {<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span>      // create a table a pre-splits regions.<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>      // The number of splits is set as:<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>      //    region servers * regions per region server).<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>      if (numberOfServers == 0) {<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span>        throw new IllegalStateException("No live regionservers");<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>      }<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span><a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span><a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>      byte[][] splits = splitter.split(<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>          totalNumberOfRegions);<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span><a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>      admin.createTable(td, splits);<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>    } catch (MasterNotRunningException e) {<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>      LOG.error("Master not running", e);<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>      throw new IOException(e);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>    } catch (TableExistsException e) {<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>          " already exists, continuing");<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>    } finally {<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>      admin.close();<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span>      unmanagedConnection.close();<a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>    }<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>    return totalNumberOfRegions;<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>  }<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span><a name="line.3960"></a>
-<span class="sourceLineNo">3961</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span>    }<a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>  }<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span><a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>  /**<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>   *  Due to async racing issue, a region may not be in<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>   *  the online region list of a region server yet, after<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span>   *  the assignment znode is deleted and the new assignment<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>   *  is recorded in master.<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>   */<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>  public void assertRegionOnServer(<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span>      final RegionInfo hri, final ServerName server,<a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>    while (true) {<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>      if (now &gt; timeoutTime) break;<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span>      Thread.sleep(10);<a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>    }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>      + " on server " + server);<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>  }<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span><a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>  /**<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>   * Check to make sure the region is open on the specified<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span>   * region server, but not on any other one.<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>   */<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>  public void assertRegionOnlyOnServer(<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span>      final RegionInfo hri, final ServerName server,<a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>    while (true) {<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3998"></a>
-<span class="sourceLineNo">3999</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span>          if (server.equals(rs.getServerName())) {<a name="line.4003"></a>
-<span class="sourceLineNo">4004</span>            continue;<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>          }<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>          for (HRegion r: hrs) {<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span>            assertTrue("Region should not be double assigned",<a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>          }<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>        }<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>        return; // good, we are happy<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span>      }<a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>      if (now &gt; timeoutTime) break;<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>      Thread.sleep(10);<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>    }<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>      + " on server " + server);<a name="line.4019"></a>
-<span class="sourceLineNo">4020</span>  }<a name="line.4020"></a>
-<span class="sourceLineNo">4021</span><a name="line.4021"></a>
-<span class="sourceLineNo">4022</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4022"></a>
-<span class="sourceLineNo">4023</span>    TableDescriptor td =<a name="line.4023"></a>
-<span class="sourceLineNo">4024</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4024"></a>
-<span class="sourceLineNo">4025</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4025"></a>
-<span class="sourceLineNo">4026</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4026"></a>
-<span class="sourceLineNo">4027</span>  }<a name="line.4027"></a>
-<span class="sourceLineNo">4028</span><a name="line.4028"></a>
-<span class="sourceLineNo">4029</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4029"></a>
-<span class="sourceLineNo">4030</span>      BlockCache blockCache) throws IOException {<a name="line.4030"></a>
-<span class="sourceLineNo">4031</span>    TableDescriptor td =<a name="line.4031"></a>
-<span class="sourceLineNo">4032</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4032"></a>
-<span class="sourceLineNo">4033</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4033"></a>
-<span class="sourceLineNo">4034</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4034"></a>
-<span class="sourceLineNo">4035</span>  }<a name="line.4035"></a>
-<span class="sourceLineNo">4036</span><a name="line.4036"></a>
-<span class="sourceLineNo">4037</span>  public void setFileSystemURI(String fsURI) {<a name="line.4037"></a>
-<span class="sourceLineNo">4038</span>    FS_URI = fsURI;<a name="line.4038"></a>
-<span class="sourceLineNo">4039</span>  }<a name="line.4039"></a>
-<span class="sourceLineNo">4040</span><a name="line.4040"></a>
-<span class="sourceLineNo">4041</span>  /**<a name="line.4041"></a>
-<span class="sourceLineNo">4042</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4042"></a>
-<span class="sourceLineNo">4043</span>   */<a name="line.4043"></a>
-<span class="sourceLineNo">4044</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4044"></a>
-<span class="sourceLineNo">4045</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4045"></a>
-<span class="sourceLineNo">4046</span>      @Override<a name="line.4046"></a>
-<span class="sourceLineNo">4047</span>      public String explainFailure() throws IOException {<a name="line.4047"></a>
-<span class="sourceLineNo">4048</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4048"></a>
-<span class="sourceLineNo">4049</span>            .getAssignmentManager().getRegionStates();<a name="line.4049"></a>
-<span class="sourceLineNo">4050</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4050"></a>
-<span class="sourceLineNo">4051</span>      }<a name="line.4051"></a>
-<span class="sourceLineNo">4052</span><a name="line.4052"></a>
-<span class="sourceLineNo">4053</span>      @Override<a name="line.4053"></a>
-<span class="sourceLineNo">4054</span>      public boolean evaluate() throws IOException {<a name="line.4054"></a>
-<span class="sourceLineNo">4055</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4055"></a>
-<span class="sourceLineNo">4056</span>        if (master == null) return false;<a name="line.4056"></a>
-<span class="sourceLineNo">4057</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4057"></a>
-<span class="sourceLineNo">4058</span>        if (am == null) return false;<a name="line.4058"></a>
-<span class="sourceLineNo">4059</span>        return !am.hasRegionsInTransition();<a name="line.4059"></a>
-<span class="sourceLineNo">4060</span>      }<a name="line.4060"></a>
-<span class="sourceLineNo">4061</span>    };<a name="line.4061"></a>
-<span class="sourceLineNo">4062</span>  }<a name="line.4062"></a>
-<span class="sourceLineNo">4063</span><a name="line.4063"></a>
-<span class="sourceLineNo">4064</span>  /**<a name="line.4064"></a>
-<span class="sourceLineNo">4065</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4065"></a>
-<span class="sourceLineNo">4066</span>   */<a name="line.4066"></a>
-<span class="sourceLineNo">4067</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4067"></a>
-<span class="sourceLineNo">4068</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4068"></a>
-<span class="sourceLineNo">4069</span>      @Override<a name="line.4069"></a>
-<span class="sourceLineNo">4070</span>      public String explainFailure() throws IOException {<a name="line.4070"></a>
-<span class="sourceLineNo">4071</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4071"></a>
-<span class="sourceLineNo">4072</span>      }<a name="line.4072"></a>
-<span class="sourceLineNo">4073</span><a name="line.4073"></a>
-<span class="sourceLineNo">4074</span>      @Override<a name="line.4074"></a>
-<span class="sourceLineNo">4075</span>      public boolean evaluate() throws IOException {<a name="line.4075"></a>
-<span class="sourceLineNo">4076</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4076"></a>
-<span class="sourceLineNo">4077</span>      }<a name="line.4077"></a>
-<span class="sourceLineNo">4078</span>    };<a name="line.4078"></a>
-<span class="sourceLineNo">4079</span>  }<a name="line.4079"></a>
-<span class="sourceLineNo">4080</span><a name="line.4080"></a>
-<span class="sourceLineNo">4081</span>  /**<a name="line.4081"></a>
-<span class="sourceLineNo">4082</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4082"></a>
-<span class="sourceLineNo">4083</span>   */<a name="line.4083"></a>
-<span class="sourceLineNo">4084</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4084"></a>
-<span class="sourceLineNo">4085</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4085"></a>
-<span class="sourceLineNo">4086</span>      @Override<a name="line.4086"></a>
-<span class="sourceLineNo">4087</span>      public String explainFailure() throws IOException {<a name="line.4087"></a>
-<span class="sourceLineNo">4088</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4088"></a>
-<span class="sourceLineNo">4089</span>      }<a name="line.4089"></a>
-<span class="sourceLineNo">4090</span><a name="line.4090"></a>
-<span class="sourceLineNo">4091</span>      @Override<a name="line.4091"></a>
-<span class="sourceLineNo">4092</span>      public boolean evaluate() throws IOException {<a name="line.4092"></a>
-<span class="sourceLineNo">4093</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4093"></a>
-<span class="sourceLineNo">4094</span>      }<a name="line.4094"></a>
-<span class="sourceLineNo">4095</span>    };<a name="line.4095"></a>
-<span class="sourceLineNo">4096</span>  }<a name="line.4096"></a>
-<span class="sourceLineNo">4097</span><a name="line.4097"></a>
-<span class="sourceLineNo">4098</span>  /**<a name="line.4098"></a>
-<span class="sourceLineNo">4099</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4099"></a>
-<span class="sourceLineNo">4100</span>   */<a name="line.4100"></a>
-<span class="sourceLineNo">4101</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4101"></a>
-<span class="sourceLineNo">4102</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4102"></a>
-<span class="sourceLineNo">4103</span>      @Override<a name="line.4103"></a>
-<span class="sourceLineNo">4104</span>      public String explainFailure() throws IOException {<a name="line.4104"></a>
-<span class="sourceLineNo">4105</span>        return explainTableAvailability(tableName);<a name="line.4105"></a>
-<span class="sourceLineNo">4106</span>      }<a name="line.4106"></a>
-<span class="sourceLineNo">4107</span><a name="line.4107"></a>
-<span class="sourceLineNo">4108</span>      @Override<a name="line.4108"></a>
-<span class="sourceLineNo">4109</span>      public boolean evaluate() throws IOException {<a name="line.4109"></a>
-<span class="sourceLineNo">4110</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4110"></a>
-<span class="sourceLineNo">4111</span>        if (tableAvailable) {<a name="line.4111"></a>
-<span class="sourceLineNo">4112</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4112"></a>
-<span class="sourceLineNo">4113</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4113"></a>
-<span class="sourceLineNo">4114</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4114"></a>
-<span class="sourceLineNo">4115</span>                .getAllRegionLocations()) {<a name="line.4115"></a>
-<span class="sourceLineNo">4116</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4116"></a>
-<span class="sourceLineNo">4117</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4117"></a>
-<span class="sourceLineNo">4118</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4118"></a>
-<span class="sourceLineNo">4119</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4119"></a>
-<span class="sourceLineNo">4120</span>                scan.addFamily(family);<a name="line.4120"></a>
-<span class="sourceLineNo">4121</span>              }<a name="line.4121"></a>
-<span class="sourceLineNo">4122</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4122"></a>
-<span class="sourceLineNo">4123</span>                scanner.next();<a name="line.4123"></a>
-<span class="sourceLineNo">4124</span>              }<a name="line.4124"></a>
-<span class="sourceLineNo">4125</span>            }<a name="line.4125"></a>
-<span class="sourceLineNo">4126</span>          }<a name="line.4126"></a>
-<span class="sourceLineNo">4127</span>        }<a name="line.4127"></a>
-<span class="sourceLineNo">4128</span>        return tableAvailable;<a name="line.4128"></a>
-<span class="sourceLineNo">4129</span>      }<a name="line.4129"></a>
-<span class="sourceLineNo">4130</span>    };<a name="line.4130"></a>
-<span class="sourceLineNo">4131</span>  }<a name="line.4131"></a>
-<span class="sourceLineNo">4132</span><a name="line.4132"></a>
-<span class="sourceLineNo">4133</span>  /**<a name="line.4133"></a>
-<span class="sourceLineNo">4134</span>   * Wait until no regions in transition.<a name="line.4134"></a>
-<span class="sourceLineNo">4135</span>   * @param timeout How long to wait.<a name="line.4135"></a>
-<span class="sourceLineNo">4136</span>   * @throws IOException<a name="line.4136"></a>
-<span class="sourceLineNo">4137</span>   */<a name="line.4137"></a>
-<span class="sourceLineNo">4138</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4138"></a>
-<span class="sourceLineNo">4139</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4139"></a>
-<span class="sourceLineNo">4140</span>  }<a name="line.4140"></a>
-<span class="sourceLineNo">4141</span><a name="line.4141"></a>
-<span class="sourceLineNo">4142</span>  /**<a name="line.4142"></a>
-<span class="sourceLineNo">4143</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4143"></a>
-<span class="sourceLineNo">4144</span>   * @throws IOException<a name="line.4144"></a>
-<span class="sourceLineNo">4145</span>   */<a name="line.4145"></a>
-<span class="sourceLineNo">4146</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4146"></a>
-<span class="sourceLineNo">4147</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4147"></a>
-<span class="sourceLineNo">4148</span>  }<a name="line.4148"></a>
-<span class="sourceLineNo">4149</span><a name="line.4149"></a>
-<span class="sourceLineNo">4150</span>  /**<a name="line.4150"></a>
-<span class="sourceLineNo">4151</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4151"></a>
-<span class="sourceLineNo">4152</span>   * @param timeoutMillis<a name="line.4152"></a>
-<span class="sourceLineNo">4153</span>   * @param labels<a name="line.4153"></a>
-<span class="sourceLineNo">4154</span>   */<a name="line.4154"></a>
-<span class="sourceLineNo">4155</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4155"></a>
-<span class="sourceLineNo">4156</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4156"></a>
-<span class="sourceLineNo">4157</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4157"></a>
-<span class="sourceLineNo">4158</span><a name="line.4158"></a>
-<span class="sourceLineNo">4159</span>      @Override<a name="line.4159"></a>
-<span class="sourceLineNo">4160</span>      public boolean evaluate() {<a name="line.4160"></a>
-<span class="sourceLineNo">4161</span>        for (String label : labels) {<a name="line.4161"></a>
-<span class="sourceLineNo">4162</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4162"></a>
-<span class="sourceLineNo">4163</span>            return false;<a name="line.4163"></a>
-<span class="sourceLineNo">4164</span>          }<a name="line.4164"></a>
-<span class="sourceLineNo">4165</span>        }<a name="line.4165"></a>
-<span class="sourceLineNo">4166</span>        return true;<a name="line.4166"></a>
-<span class="sourceLineNo">4167</span>      }<a name="line.4167"></a>
-<span class="sourceLineNo">4168</span><a name="line.4168"></a>
-<span class="sourceLineNo">4169</span>      @Override<a name="line.4169"></a>
-<span class="sourceLineNo">4170</span>      public String explainFailure() {<a name="line.4170"></a>
-<span class="sourceLineNo">4171</span>        for (String label : labels) {<a name="line.4171"></a>
-<span class="sourceLineNo">4172</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4172"></a>
-<span class="sourceLineNo">4173</span>            return label + " is not available yet";<a name="line.4173"></a>
-<span class="sourceLineNo">4174</span>          }<a name="line.4174"></a>
-<span class="sourceLineNo">4175</span>        }<a name="line.4175"></a>
-<span class="sourceLineNo">4176</span>        return "";<a name="line.4176"></a>
-<span class="sourceLineNo">4177</span>      }<a name="line.4177"></a>
-<span class="sourceLineNo">4178</span>    });<a name="line.4178"></a>
-<span class="sourceLineNo">4179</span>  }<a name="line.4179"></a>
-<span class="sourceLineNo">4180</span><a name="line.4180"></a>
-<span class="sourceLineNo">4181</span>  /**<a name="line.4181"></a>
-<span class="sourceLineNo">4182</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4182"></a>
-<span class="sourceLineNo">4183</span>   * encoding, bloom codecs available.<a name="line.4183"></a>
-<span class="sourceLineNo">4184</span>   * @return the list of column descriptors<a name="line.4184"></a>
-<span class="sourceLineNo">4185</span>   */<a name="line.4185"></a>
-<span class="sourceLineNo">4186</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4186"></a>
-<span class="sourceLineNo">4187</span>    return generateColumnDescriptors("");<a name="line.4187"></a>
-<span class="sourceLineNo">4188</span>  }<a name="line.4188"></a>
-<span class="sourceLineNo">4189</span><a name="line.4189"></a>
-<span class="sourceLineNo">4190</span>  /**<a name="line.4190"></a>
-<span class="sourceLineNo">4191</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4191"></a>
-<span class="sourceLineNo">4192</span>   * encoding, bloom codecs available.<a name="line.4192"></a>
-<span class="sourceLineNo">4193</span>   * @param prefix family names prefix<a name="line.4193"></a>
-<span class="sourceLineNo">4194</span>   * @return the list of column descriptors<a name="line.4194"></a>
-<span class="sourceLineNo">4195</span>   */<a name="line.4195"></a>
-<span class="sourceLineNo">4196</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4196"></a>
-<span class="sourceLineNo">4197</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4197"></a>
-<span class="sourceLineNo">4198</span>    long familyId = 0;<a name="line.4198"></a>
-<span class="sourceLineNo">4199</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4199"></a>
-<span class="sourceLineNo">4200</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4200"></a>
-<span class="sourceLineNo">4201</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4201"></a>
-<span class="sourceLineNo">4202</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4202"></a>
-<span class="sourceLineNo">4203</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4203"></a>
-<span class="sourceLineNo">4204</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4204"></a>
-<span class="sourceLineNo">4205</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4205"></a>
-<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4206"></a>
-<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4207"></a>
-<span class="sourceLineNo">4208</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4208"></a>
-<span class="sourceLineNo">4209</span>          familyId++;<a name="line.4209"></a>
-<span class="sourceLineNo">4210</span>        }<a name="line.4210"></a>
-<span class="sourceLineNo">4211</span>      }<a name="line.4211"></a>
-<span class="sourceLineNo">4212</span>    }<a name="line.4212"></a>
-<span class="sourceLineNo">4213</span>    return columnFamilyDescriptors;<a name="line.4213"></a>
-<span class="sourceLineNo">4214</span>  }<a name="line.4214"></a>
-<span class="sourceLineNo">4215</span><a name="line.4215"></a>
-<span class="sourceLineNo">4216</span>  /**<a name="line.4216"></a>
-<span class="sourceLineNo">4217</span>   * Get supported compression algorithms.<a name="line.4217"></a>
-<span class="sourceLineNo">4218</span>   * @return supported compression algorithms.<a name="line.4218"></a>
-<span class="sourceLineNo">4219</span>   */<a name="line.4219"></a>
-<span class="sourceLineNo">4220</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4220"></a>
-<span class="sourceLineNo">4221</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4221"></a>
-<span class="sourceLineNo">4222</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4222"></a>
-<span class="sourceLineNo">4223</span>    for (String algoName : allAlgos) {<a name="line.4223"></a>
-<span class="sourceLineNo">4224</span>      try {<a name="line.4224"></a>
-<span class="sourceLineNo">4225</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4225"></a>
-<span class="sourceLineNo">4226</span>        algo.getCompressor();<a name="line.4226"></a>
-<span class="sourceLineNo">4227</span>        supportedAlgos.add(algo);<a name="line.4227"></a>
-<span class="sourceLineNo">4228</span>      } catch (Throwable t) {<a name="line.4228"></a>
-<span class="sourceLineNo">4229</span>        // this algo is not available<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>      }<a name="line.4230"></a>
-<span class="sourceLineNo">4231</span>    }<a name="line.4231"></a>
-<span class="sourceLineNo">4232</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4232"></a>
-<span class="sourceLineNo">4233</span>  }<a name="line.4233"></a>
-<span class="sourceLineNo">4234</span><a name="line.4234"></a>
-<span class="sourceLineNo">4235</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4235"></a>
-<span class="sourceLineNo">4236</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4236"></a>
-<span class="sourceLineNo">4237</span>    scan.setSmall(true);<a name="line.4237"></a>
-<span class="sourceLineNo">4238</span>    scan.setCaching(1);<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>    scan.setReversed(true);<a name="line.4239"></a>
-<span class="sourceLineNo">4240</span>    scan.addFamily(family);<a name="line.4240"></a>
-<span class="sourceLineNo">4241</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4241"></a>
-<span class="sourceLineNo">4242</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4242"></a>
-<span class="sourceLineNo">4243</span>      scanner.next(cells);<a name="line.4243"></a>
-<span class="sourceLineNo">4244</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4244"></a>
-<span class="sourceLineNo">4245</span>        return null;<a name="line.4245"></a>
-<span class="sourceLineNo">4246</span>      }<a name="line.4246"></a>
-<span class="sourceLineNo">4247</span>      return Result.create(cells);<a name="line.4247"></a>
-<span class="sourceLineNo">4248</span>    }<a name="line.4248"></a>
-<span class="sourceLineNo">4249</span>  }<a name="line.4249"></a>
-<span class="sourceLineNo">4250</span><a name="line.4250"></a>
-<span class="sourceLineNo">4251</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4251"></a>
-<span class="sourceLineNo">4252</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4252"></a>
-<span class="sourceLineNo">4253</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4253"></a>
-<span class="sourceLineNo">4254</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4254"></a>
-<span class="sourceLineNo">4255</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4255"></a>
-<span class="sourceLineNo">4256</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4256"></a>
-<span class="sourceLineNo">4257</span>  }<a name="line.4257"></a>
-<span class="sourceLineNo">4258</span><a name="line.4258"></a>
-<span class="sourceLineNo">4259</span>  /**<a name="line.4259"></a>
-<span class="sourceLineNo">4260</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4260"></a>
-<span class="sourceLineNo">4261</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4261"></a>
-<span class="sourceLineNo">4262</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4262"></a>
-<span class="sourceLineNo">4263</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4263"></a>
-<span class="sourceLineNo">4264</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4264"></a>
-<span class="sourceLineNo">4265</span>   * less baggage. It came in in HBASE-5291.<a name="line.4265"></a>
-<span class="sourceLineNo">4266</span>   */<a name="line.4266"></a>
-<span class="sourceLineNo">4267</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4267"></a>
-<span class="sourceLineNo">4268</span>    Properties conf = MiniKdc.createConf();<a name="line.4268"></a>
-<span class="sourceLineNo">4269</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4269"></a>
-<span class="sourceLineNo">4270</span>    MiniKdc kdc = null;<a name="line.4270"></a>
-<span class="sourceLineNo">4271</span>    File dir = null;<a name="line.4271"></a>
-<span class="sourceLineNo">4272</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4272"></a>
-<span class="sourceLineNo">4273</span>    // another service captures the port in between which'll result in BindException.<a name="line.4273"></a>
-<span class="sourceLineNo">4274</span>    boolean bindException;<a name="line.4274"></a>
-<span class="sourceLineNo">4275</span>    int numTries = 0;<a name="line.4275"></a>
-<span class="sourceLineNo">4276</span>    do {<a name="line.4276"></a>
-<span class="sourceLineNo">4277</span>      try {<a name="line.4277"></a>
-<span class="sourceLineNo">4278</span>        bindException = false;<a name="line.4278"></a>
-<span class="sourceLineNo">4279</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4279"></a>
-<span class="sourceLineNo">4280</span>        kdc = new MiniKdc(conf, dir);<a name="line.4280"></a>
-<span class="sourceLineNo">4281</span>        kdc.start();<a name="line.4281"></a>
-<span class="sourceLineNo">4282</span>      } catch (BindException e) {<a name="line.4282"></a>
-<span class="sourceLineNo">4283</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4283"></a>
-<span class="sourceLineNo">4284</span>        numTries++;<a name="line.4284"></a>
-<span class="sourceLineNo">4285</span>        if (numTries == 3) {<a name="line.4285"></a>
-<span class="sourceLineNo">4286</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4286"></a>
-<span class="sourceLineNo">4287</span>          throw e;<a name="line.4287"></a>
-<span class="sourceLineNo">4288</span>        }<a name="line.4288"></a>
-<span class="sourceLineNo">4289</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4289"></a>
-<span class="sourceLineNo">4290</span>        bindException = true;<a name="line.4290"></a>
-<span class="sourceLineNo">4291</span>      }<a name="line.4291"></a>
-<span class="sourceLineNo">4292</span>    } while (bindException);<a name="line.4292"></a>
-<span class="sourceLineNo">4293</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>    return kdc;<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>  }<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span><a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>    int numHFiles = 0;<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4299"></a>
-<span class="sourceLineNo">4300</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4300"></a>
-<span class="sourceLineNo">4301</span>                                    family);<a name="line.4301"></a>
-<span class="sourceLineNo">4302</span>    }<a name="line.4302"></a>
-<span class="sourceLineNo">4303</span>    return numHFiles;<a name="line.4303"></a>
-<span class="sourceLineNo">4304</span>  }<a name="line.4304"></a>
-<span class="sourceLineNo">4305</span><a name="line.4305"></a>
-<span class="sourceLineNo">4306</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4306"></a>
-<span class="sourceLineNo">4307</span>                               final byte[] family) {<a name="line.4307"></a>
-<span class="sourceLineNo">4308</span>    int numHFiles = 0;<a name="line.4308"></a>
-<span class="sourceLineNo">4309</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4309"></a>
-<span class="sourceLineNo">4310</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4310"></a>
-<span class="sourceLineNo">4311</span>    }<a name="line.4311"></a>
-<span class="sourceLineNo">4312</span>    return numHFiles;<a name="line.4312"></a>
-<span class="sourceLineNo">4313</span>  }<a name="line.4313"></a>
-<span class="sourceLineNo">4314</span><a name="line.4314"></a>
-<span class="sourceLineNo">4315</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4315"></a>
-<span class="sourceLineNo">4316</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4316"></a>
-<span class="sourceLineNo">4317</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4317"></a>
-<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4318"></a>
-<span class="sourceLineNo">4319</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4319"></a>
-<span class="sourceLineNo">4320</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4320"></a>
-<span class="sourceLineNo">4321</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4321"></a>
-<span class="sourceLineNo">4322</span>      assertEquals(0,<a name="line.4322"></a>
-<span class="sourceLineNo">4323</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4323"></a>
-<span class="sourceLineNo">4324</span>    }<a name="line.4324"></a>
-<span class="sourceLineNo">4325</span>  }<a name="line.4325"></a>
-<span class="sourceLineNo">4326</span><a name="line.4326"></a>
-<span class="sourceLineNo">4327</span>  /**<a name="line.4327"></a>
-<span class="sourceLineNo">4328</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4328"></a>
-<span class="sourceLineNo">4329</span>   * invocations.<a name="line.4329"></a>
-<span class="sourceLineNo">4330</span>   */<a name="line.4330"></a>
-<span class="sourceLineNo">4331</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4331"></a>
-<span class="sourceLineNo">4332</span>    throws InterruptedException {<a name="line.4332"></a>
-<span class="sourceLineNo">4333</span>    try {<a name="line.4333"></a>
-<span class="sourceLineNo">4334</span>      while (!condition.getAsBoolean()) {<a name="line.4334"></a>
-<span class="sourceLineNo">4335</span>        Thread.sleep(sleepMillis);<a name="line.4335"></a>
-<span class="sourceLineNo">4336</span>      }<a name="line.4336"></a>
-<span class="sourceLineNo">4337</span>    } catch (RuntimeException e) {<a name="line.4337"></a>
-<span class="sourceLineNo">4338</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4338"></a>
-<span class="sourceLineNo">4339</span>        throw (AssertionError) e.getCause();<a name="line.4339"></a>
-<span class="sourceLineNo">4340</span>      }<a name="line.4340"></a>
-<span class="sourceLineNo">4341</span>      throw e;<a name="line.4341"></a>
-<span class="sourceLineNo">4342</span>    }<a name="line.4342"></a>
-<span class="sourceLineNo">4343</span>  }<a name="line.4343"></a>
-<span class="sourceLineNo">4344</span>}<a name="line.4344"></a>
+<span class="sourceLineNo">3372</span><a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>  /**<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param c Initial configuration<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   * @return A new configuration instance with a different user set into it.<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>   * @throws IOException<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>   */<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>  public static User getDifferentUser(final Configuration c,<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    final String differentiatingSuffix)<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  throws IOException {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      return User.getCurrent();<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    }<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>    String username = User.getCurrent().getName() +<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>      differentiatingSuffix;<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    User user = User.createUserForTesting(c, username,<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>        new String[]{"supergroup"});<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>    return user;<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>  }<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span><a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      throws IOException {<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      try {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        for (RegionInfo region :<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>          online.add(region.getRegionNameAsString());<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>        }<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>      } catch (RegionServerStoppedException e) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>        // That's fine.<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>      }<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>      try {<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>        for (RegionInfo region :<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>          online.add(region.getRegionNameAsString());<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>        }<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>      } catch (RegionServerStoppedException e) {<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>        // That's fine.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>      } catch (ServerNotRunningYetException e) {<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>        // That's fine.<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>      }<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    }<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>    return online;<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>  }<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span><a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>  /**<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>   * &lt;pre&gt;<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>   * &lt;/pre&gt;<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>   * @param max<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>   * @throws NoSuchFieldException<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>   * @throws SecurityException<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @throws IllegalAccessException<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @throws IllegalArgumentException<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>      final int max) {<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>    try {<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>        String className = clazz.getSimpleName();<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        if (className.equals("DFSOutputStream")) {<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>          if (clazz.isInstance(stream)) {<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>            Field maxRecoveryErrorCountField =<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>            break;<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>          }<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      }<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>    } catch (Exception e) {<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>      LOG.info("Could not set max recovery field", e);<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>    }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span><a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>   * has completed assignment.<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>   * @return true if the region is assigned false otherwise.<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>   */<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>      throws IOException, InterruptedException {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    am.assign(regionInfo);<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>  }<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span><a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>  /**<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>   *<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>   * @param destRegion region to move<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * @param destServer destination server of the region<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * @throws InterruptedException<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   * @throws IOException<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   */<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>      throws InterruptedException, IOException {<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    while (true) {<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>          .getRegionServerOfRegion(destRegion);<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>        break;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>      }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      Thread.sleep(10);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    }<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>  }<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span><a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>  /**<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>   * This means all regions have been deployed,<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>   * server.<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>   * @param tableName the table name<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>   * @throws IOException<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>   */<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span><a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>  /**<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * Waith until all system table's regions get assigned<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   * @throws IOException<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>   */<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>  }<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span><a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>  /**<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>   * server.<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>   * @param tableName the table name<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>   * @param timeout timeout, in milliseconds<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>   * @throws IOException<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>   */<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>      throws IOException {<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>            timeout + "ms");<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>          @Override<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>          public String explainFailure() throws IOException {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>            return explainTableAvailability(tableName);<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>          }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>          @Override<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>          public boolean evaluate() throws IOException {<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>            Scan scan = new Scan();<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>            boolean tableFound = false;<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>                  // (for fault tolerance testing).<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>                  tableFound = true;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>                  byte[] server =<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>                  if (server == null) {<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>                    return false;<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>                  } else {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>                    byte[] startCode =<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>                    ServerName serverName =<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>                            Bytes.toLong(startCode));<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>                      return false;<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>                    }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>                  }<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>                    return false;<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>                  }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>                }<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>              }<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>            }<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>            if (!tableFound) {<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>            }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>            return tableFound;<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>          }<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>        });<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      }<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>    }<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>    // check from the master state if we are using a mini cluster<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      // returning -- sometimes this can lag.<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>        @Override<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>        public String explainFailure() throws IOException {<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>          return explainTableAvailability(tableName);<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>        }<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span><a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>        @Override<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>        public boolean evaluate() throws IOException {<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>        }<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>      });<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>    }<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>  }<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span><a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>  /**<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>   * Do a small get/scan against one store. This is required because store<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   */<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>                                                Get get) throws IOException {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>    Scan scan = new Scan(get);<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>        // readpoint 0.<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>        0);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span><a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    scanner.next(result);<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    if (!result.isEmpty()) {<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>      // verify that we are on the row we want:<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>      Cell kv = result.get(0);<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>        result.clear();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>      }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    }<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>    scanner.close();<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    return result;<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>  }<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span><a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  /**<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>   * Create region split keys between startkey and endKey<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>   *<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>   * @param startKey<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>   * @param endKey<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   * @return resulting split keys<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>   */<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    assertTrue(numRegions&gt;3);<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>    return result;<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  }<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span><a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>  /**<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>   * Do a small get/scan against one store. This is required because store<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>   */<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>                                                byte [] row,<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>                                                ) throws IOException {<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    Get get = new Get(row);<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span><a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    return getFromStoreFile(store,get);<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>  }<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span><a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>    final int eLen = expected.size();<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>    final int aLen = actual.size();<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span><a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    int i;<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>    for (i = 0; i &lt; minLen<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        ++i) {}<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span><a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>    if (additionalMsg == null) {<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      additionalMsg = "";<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    if (!additionalMsg.isEmpty()) {<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>      additionalMsg = ". " + additionalMsg;<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>    }<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span><a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>    if (eLen != aLen || i != minLen) {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>      throw new AssertionError(<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    }<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>      return lst.get(i).toString();<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>    } else {<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>      return "&lt;out_of_range&gt;";<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>    }<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span><a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>  public String getClusterKey() {<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  }<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span><a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  /** Creates a random table with the given parameters */<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>  public Table createRandomTable(TableName tableName,<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      final Collection&lt;String&gt; families,<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      final int maxVersions,<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>      final int numColsPerRow,<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>      final int numFlushes,<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>      final int numRegions,<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>      final int numRowsPerFlush)<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>      throws IOException, InterruptedException {<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span><a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>        "\n");<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span><a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>    final int numCF = families.size();<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>    {<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>      int cfIndex = 0;<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>      for (String cf : families) {<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>      }<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span><a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>    final int actualStartKey = 0;<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>    final String keyFormat = "%08x";<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>        maxVersions,<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        numRegions);<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span><a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    if (hbaseCluster != null) {<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>    }<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span><a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span><a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span><a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>        Put put = new Put(row);<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>        Delete del = new Delete(row);<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>          final long ts = rand.nextInt();<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>          if (rand.nextBoolean()) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>                ts + "_random_" + rand.nextLong());<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>            put.addColumn(cf, qual, ts, value);<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>            del.addColumn(cf, qual, ts);<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          } else {<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>            del.addColumns(cf, qual, ts);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>          }<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>        }<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span><a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (!put.isEmpty()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          mutator.mutate(put);<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>        }<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span><a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        if (!del.isEmpty()) {<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>          mutator.mutate(del);<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>        }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      }<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      mutator.flush();<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      if (hbaseCluster != null) {<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      }<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>    }<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    mutator.close();<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span><a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>    return table;<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>  }<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span><a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>  public static int randomFreePort() {<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>  }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  public static String randomMultiCastAddress() {<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>    return "226.1.1." + random.nextInt(254);<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>  }<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span><a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  public static void waitForHostPort(String host, int port)<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>      throws IOException {<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>    final int maxTimeMs = 10000;<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>    IOException savedException = null;<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>      try {<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>        sock.close();<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>        savedException = null;<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>        break;<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>      } catch (UnknownHostException e) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      } catch (IOException e) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        savedException = e;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span><a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>    if (savedException != null) {<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>      throw savedException;<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>    }<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>  }<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span><a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>  /**<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>   * logs a warning and continues.<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>   * @return the number of regions the table was split into<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>   */<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      Durability.USE_DEFAULT);<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>  }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>  /**<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * logs a warning and continues.<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * @return the number of regions the table was split into<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   */<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>    builder.setDurability(durability);<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>    builder.setRegionReplication(regionReplication);<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    cfBuilder.setCompressionType(compression);<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>      numRegionsPerServer);<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>  }<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span><a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>  /**<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>   * logs a warning and continues.<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>   * @return the number of regions the table was split into<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>   */<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>    builder.setDurability(durability);<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>    builder.setRegionReplication(regionReplication);<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>      cfBuilder.setCompressionType(compression);<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span>      hcds[i] = cfBuilder.build();<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>    }<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   * logs a warning and continues.<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>   * @return the number of regions the table was split into<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span>   */<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3885"></a>
+<span class="sourceLineNo">3886</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span>  }<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span><a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>  /**<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>   * logs a warning and continues.<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>   * @return the number of regions the table was split into<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>   */<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>        numRegionsPerServer);<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  }<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span><a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  /**<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>   * logs a warning and continues.<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>   * @return the number of regions the table was split into<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>   */<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span>      int numRegionsPerServer) throws IOException {<a name="line.3907"></a>
+<span class="sourceLineNo">3908</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span>  }<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span><a name="line.3911"></a>
+<span class="sourceLineNo">3912</span>  /**<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>   * logs a warning and continues.<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>   * @return the number of regions the table was split into<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span>   */<a name="line.3916"></a>
+<span class="sourceLineNo">3917</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3920"></a>
+<span class="sourceLineNo">3921</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span>        builder.setColumnFamily(cd);<a name="line.3923"></a>
+<span class="sourceLineNo">3924</span>      }<a name="line.3924"></a>
+<span class="sourceLineNo">3925</span>    }<a name="line.3925"></a>
+<span class="sourceLineNo">3926</span>    td = builder.build();<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span>    int totalNumberOfRegions = 0;<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span><a name="line.3930"></a>
+<span class="sourceLineNo">3931</span>    try {<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span>      // create a table a pre-splits regions.<a name="line.3932"></a>
+<span class="sourceLineNo">3933</span>      // The number of splits is set as:<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span>      //    region servers * regions per region server).<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3935"></a>
+<span class="sourceLineNo">3936</span>      if (numberOfServers == 0) {<a name="line.3936"></a>
+<span class="sourceLineNo">3937</span>        throw new IllegalStateException("No live regionservers");<a name="line.3937"></a>
+<span class="sourceLineNo">3938</span>      }<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span><a name="line.3939"></a>
+<span class="sourceLineNo">3940</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span><a name="line.3944"></a>
+<span class="sourceLineNo">3945</span>      byte[][] splits = splitter.split(<a name="line.3945"></a>
+<span class="sourceLineNo">3946</span>          totalNumberOfRegions);<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span><a name="line.3947"></a>
+<span class="sourceLineNo">3948</span>      admin.createTable(td, splits);<a name="line.3948"></a>
+<span class="sourceLineNo">3949</span>    } catch (MasterNotRunningException e) {<a name="line.3949"></a>
+<span class="sourceLineNo">3950</span>      LOG.error("Master not running", e);<a name="line.3950"></a>
+<span class="sourceLineNo">3951</span>      throw new IOException(e);<a name="line.3951"></a>
+<span class="sourceLineNo">3952</span>    } catch (TableExistsException e) {<a name="line.3952"></a>
+<span class="sourceLineNo">3953</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3953"></a>
+<span class="sourceLineNo">3954</span>          " already exists, continuing");<a name="line.3954"></a>
+<span class="sourceLineNo">3955</span>    } finally {<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span>      admin.close();<a name="line.3956"></a>
+<span class="sourceLineNo">3957</span>      unmanagedConnection.close();<a name="line.3957"></a>
+<span class="sourceLineNo">3958</span>    }<a name="line.3958"></a>
+<span class="sourceLineNo">3959</span>    return totalNumberOfRegions;<a name="line.3959"></a>
+<span class="sourceLineNo">3960</span>  }<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span><a name="line.3961"></a>
+<span class="sourceLineNo">3962</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3962"></a>
+<span class="sourceLineNo">3963</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3964"></a>
+<span class="sourceLineNo">3965</span>    }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span>  }<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span><a name="line.3967"></a>
+<span class="sourceLineNo">3968</span>  /**<a name="line.3968"></a>
+<span class="sourceLineNo">3969</span>   *  Due to async racing issue, a region may not be in<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span>   *  the online region list of a region server yet, after<a name="line.3970"></a>
+<span class="sourceLineNo">3971</span>   *  the assignment znode is deleted and the new assignment<a name="line.3971"></a>
+<span class="sourceLineNo">3972</span>   *  is recorded in master.<a name="line.3972"></a>
+<span class="sourceLineNo">3973</span>   */<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span>  public void assertRegionOnServer(<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>      final RegionInfo hri, final ServerName server,<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3976"></a>
+<span class="sourceLineNo">3977</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3977"></a>
+<span class="sourceLineNo">3978</span>    while (true) {<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3981"></a>
+<span class="sourceLineNo">3982</span>      if (now &gt; timeoutTime) break;<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span>      Thread.sleep(10);<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span>    }<a name="line.3984"></a>
+<span class="sourceLineNo">3985</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span>      + " on server " + server);<a name="line.3986"></a>
+<span class="sourceLineNo">3987</span>  }<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span><a name="line.3988"></a>
+<span class="sourceLineNo">3989</span>  /**<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span>   * Check to make sure the region is open on the specified<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span>   * region server, but not on any other one.<a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>   */<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span>  public void assertRegionOnlyOnServer(<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span>      final RegionInfo hri, final ServerName server,<a name="line.3994"></a>
+<span class="sourceLineNo">3995</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3996"></a>
+<span class="sourceLineNo">3997</span>    while (true) {<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3998"></a>
+<span class="sourceLineNo">3999</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4001"></a>
+<span class="sourceLineNo">4002</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4002"></a>
+<span class="sourceLineNo">4003</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span>          if (server.equals(rs.getServerName())) {<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>            continue;<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span>          }<a name="line.4006"></a>
+<span class="sourceLineNo">4007</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4007"></a>
+<span class="sourceLineNo">4008</span>          for (HRegion r: hrs) {<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span>            assertTrue("Region should not be double assigned",<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span>          }<a name="line.4011"></a>
+<span class="sourceLineNo">4012</span>        }<a name="line.4012"></a>
+<span class="sourceLineNo">4013</span>        return; // good, we are happy<a name="line.4013"></a>
+<span class="sourceLineNo">4014</span>      }<a name="line.4014"></a>
+<span class="sourceLineNo">4015</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4015"></a>
+<span class="sourceLineNo">4016</span>      if (now &gt; timeoutTime) break;<a name="line.4016"></a>
+<span class="sourceLineNo">4017</span>      Thread.sleep(10);<a name="line.4017"></a>
+<span class="sourceLineNo">4018</span>    }<a name="line.4018"></a>
+<span class="sourceLineNo">4019</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4019"></a>
+<span class="sourceLineNo">4020</span>      + " on server " + server);<a name="line.4020"></a>
+<span class="sourceLineNo">4021</span>  }<a name="line.4021"></a>
+<span class="sourceLineNo">4022</span><a name="line.4022"></a>
+<span class="sourceLineNo">4023</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4023"></a>
+<span class="sourceLineNo">4024</span>    TableDescriptor td =<a name="line.4024"></a>
+<span class="sourceLineNo">4025</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4025"></a>
+<span class="sourceLineNo">4026</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4026"></a>
+<span class="sourceLineNo">4027</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4027"></a>
+<span class="sourceLineNo">4028</span>  }<a name="line.4028"></a>
+<span class="sourceLineNo">4029</span><a name="line.4029"></a>
+<span class="sourceLineNo">4030</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4030"></a>
+<span class="sourceLineNo">4031</span>      BlockCache blockCache) throws IOException {<a name="line.4031"></a>
+<span class="sourceLineNo">4032</span>    TableDescriptor td =<a name="line.4032"></a>
+<span class="sourceLineNo">4033</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4033"></a>
+<span class="sourceLineNo">4034</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4034"></a>
+<span class="sourceLineNo">4035</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4035"></a>
+<span class="sourceLineNo">4036</span>  }<a name="line.4036"></a>
+<span class="sourceLineNo">4037</span><a name="line.4037"></a>
+<span class="sourceLineNo">4038</span>  public void setFileSystemURI(String fsURI) {<a name="line.4038"></a>
+<span class="sourceLineNo">4039</span>    FS_URI = fsURI;<a name="line.4039"></a>
+<span class="sourceLineNo">4040</span>  }<a name="line.4040"></a>
+<span class="sourceLineNo">4041</span><a name="line.4041"></a>
+<span class="sourceLineNo">4042</span>  /**<a name="line.4042"></a>
+<span class="sourceLineNo">4043</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4043"></a>
+<span class="sourceLineNo">4044</span>   */<a name="line.4044"></a>
+<span class="sourceLineNo">4045</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4045"></a>
+<span class="sourceLineNo">4046</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4046"></a>
+<span class="sourceLineNo">4047</span>      @Override<a name="line.4047"></a>
+<span class="sourceLineNo">4048</span>      public String explainFailure() throws IOException {<a name="line.4048"></a>
+<span class="sourceLineNo">4049</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4049"></a>
+<span class="sourceLineNo">4050</span>            .getAssignmentManager().getRegionStates();<a name="line.4050"></a>
+<span class="sourceLineNo">4051</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4051"></a>
+<span class="sourceLineNo">4052</span>      }<a name="line.4052"></a>
+<span class="sourceLineNo">4053</span><a name="line.4053"></a>
+<span class="sourceLineNo">4054</span>      @Override<a name="line.4054"></a>
+<span class="sourceLineNo">4055</span>      public boolean evaluate() throws IOException {<a name="line.4055"></a>
+<span class="sourceLineNo">4056</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4056"></a>
+<span class="sourceLineNo">4057</span>        if (master == null) return false;<a name="line.4057"></a>
+<span class="sourceLineNo">4058</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4058"></a>
+<span class="sourceLineNo">4059</span>        if (am == null) return false;<a name="line.4059"></a>
+<span class="sourceLineNo">4060</span>        return !am.hasRegionsInTransition();<a name="line.4060"></a>
+<span class="sourceLineNo">4061</span>      }<a name="line.4061"></a>
+<span class="sourceLineNo">4062</span>    };<a name="line.4062"></a>
+<span class="sourceLineNo">4063</span>  }<a name="line.4063"></a>
+<span class="sourceLineNo">4064</span><a name="line.4064"></a>
+<span class="sourceLineNo">4065</span>  /**<a name="line.4065"></a>
+<span class="sourceLineNo">4066</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4066"></a>
+<span class="sourceLineNo">4067</span>   */<a name="line.4067"></a>
+<span class="sourceLineNo">4068</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4068"></a>
+<span class="sourceLineNo">4069</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4069"></a>
+<span class="sourceLineNo">4070</span>      @Override<a name="line.4070"></a>
+<span class="sourceLineNo">4071</span>      public String explainFailure() throws IOException {<a name="line.4071"></a>
+<span class="sourceLineNo">4072</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4072"></a>
+<span class="sourceLineNo">4073</span>      }<a name="line.4073"></a>
+<span class="sourceLineNo">4074</span><a name="line.4074"></a>
+<span class="sourceLineNo">4075</span>      @Override<a name="line.4075"></a>
+<span class="sourceLineNo">4076</span>      public boolean evaluate() throws IOException {<a name="line.4076"></a>
+<span class="sourceLineNo">4077</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4077"></a>
+<span class="sourceLineNo">4078</span>      }<a name="line.4078"></a>
+<span class="sourceLineNo">4079</span>    };<a name="line.4079"></a>
+<span class="sourceLineNo">4080</span>  }<a name="line.4080"></a>
+<span class="sourceLineNo">4081</span><a name="line.4081"></a>
+<span class="sourceLineNo">4082</span>  /**<a name="line.4082"></a>
+<span class="sourceLineNo">4083</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4083"></a>
+<span class="sourceLineNo">4084</span>   */<a name="line.4084"></a>
+<span class="sourceLineNo">4085</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4085"></a>
+<span class="sourceLineNo">4086</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4086"></a>
+<span class="sourceLineNo">4087</span>      @Override<a name="line.4087"></a>
+<span class="sourceLineNo">4088</span>      public String explainFailure() throws IOException {<a name="line.4088"></a>
+<span class="sourceLineNo">4089</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4089"></a>
+<span class="sourceLineNo">4090</span>      }<a name="line.4090"></a>
+<span class="sourceLineNo">4091</span><a name="line.4091"></a>
+<span class="sourceLineNo">4092</span>      @Override<a name="line.4092"></a>
+<span class="sourceLineNo">4093</span>      public boolean evaluate() throws IOException {<a name="line.4093"></a>
+<span class="sourceLineNo">4094</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4094"></a>
+<span class="sourceLineNo">4095</span>      }<a name="line.4095"></a>
+<span class="sourceLineNo">4096</span>    };<a name="line.4096"></a>
+<span class="sourceLineNo">4097</span>  }<a name="line.4097"></a>
+<span class="sourceLineNo">4098</span><a name="line.4098"></a>
+<span class="sourceLineNo">4099</span>  /**<a name="line.4099"></a>
+<span class="sourceLineNo">4100</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4100"></a>
+<span class="sourceLineNo">4101</span>   */<a name="line.4101"></a>
+<span class="sourceLineNo">4102</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4102"></a>
+<span class="sourceLineNo">4103</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4103"></a>
+<span class="sourceLineNo">4104</span>      @Override<a name="line.4104"></a>
+<span class="sourceLineNo">4105</span>      public String explainFailure() throws IOException {<a name="line.4105"></a>
+<span class="sourceLineNo">4106</span>        return explainTableAvailability(tableName);<a name="line.4106"></a>
+<span class="sourceLineNo">4107</span>      }<a name="line.4107"></a>
+<span class="sourceLineNo">4108</span><a name="line.4108"></a>
+<span class="sourceLineNo">4109</span>      @Override<a name="line.4109"></a>
+<span class="sourceLineNo">4110</span>      public boolean evaluate() throws IOException {<a name="line.4110"></a>
+<span class="sourceLineNo">4111</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4111"></a>
+<span class="sourceLineNo">4112</span>        if (tableAvailable) {<a name="line.4112"></a>
+<span class="sourceLineNo">4113</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4113"></a>
+<span class="sourceLineNo">4114</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4114"></a>
+<span class="sourceLineNo">4115</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4115"></a>
+<span class="sourceLineNo">4116</span>                .getAllRegionLocations()) {<a name="line.4116"></a>
+<span class="sourceLineNo">4117</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4117"></a>
+<span class="sourceLineNo">4118</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4118"></a>
+<span class="sourceLineNo">4119</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4119"></a>
+<span class="sourceLineNo">4120</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4120"></a>
+<span class="sourceLineNo">4121</span>                scan.addFamily(family);<a name="line.4121"></a>
+<span class="sourceLineNo">4122</span>              }<a name="line.4122"></a>
+<span class="sourceLineNo">4123</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4123"></a>
+<span class="sourceLineNo">4124</span>                scanner.next();<a name="line.4124"></a>
+<span class="sourceLineNo">4125</span>              }<a name="line.4125"></a>
+<span class="sourceLineNo">4126</span>            }<a name="line.4126"></a>
+<span class="sourceLineNo">4127</span>          }<a name="line.4127"></a>
+<span class="sourceLineNo">4128</span>        }<a name="line.4128"></a>
+<span class="sourceLineNo">4129</span>        return tableAvailable;<a name="line.4129"></a>
+<span class="sourceLineNo">4130</span>      }<a name="line.4130"></a>
+<span class="sourceLineNo">4131</span>    };<a name="line.4131"></a>
+<span class="sourceLineNo">4132</span>  }<a name="line.4132"></a>
+<span class="sourceLineNo">4133</span><a name="line.4133"></a>
+<span class="sourceLineNo">4134</span>  /**<a name="line.4134"></a>
+<span class="sourceLineNo">4135</span>   * Wait until no regions in transition.<a name="line.4135"></a>
+<span class="sourceLineNo">4136</span>   * @param timeout How long to wait.<a name="line.4136"></a>
+<span class="sourceLineNo">4137</span>   * @throws IOException<a name="line.4137"></a>
+<span class="sourceLineNo">4138</span>   */<a name="line.4138"></a>
+<span class="sourceLineNo">4139</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4139"></a>
+<span class="sourceLineNo">4140</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4140"></a>
+<span class="sourceLineNo">4141</span>  }<a name="line.4141"></a>
+<span class="sourceLineNo">4142</span><a name="line.4142"></a>
+<span class="sourceLineNo">4143</span>  /**<a name="line.4143"></a>
+<span class="sourceLineNo">4144</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4144"></a>
+<span class="sourceLineNo">4145</span>   * @throws IOException<a name="line.4145"></a>
+<span class="sourceLineNo">4146</span>   */<a name="line.4146"></a>
+<span class="sourceLineNo">4147</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4147"></a>
+<span class="sourceLineNo">4148</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4148"></a>
+<span class="sourceLineNo">4149</span>  }<a name="line.4149"></a>
+<span class="sourceLineNo">4150</span><a name="line.4150"></a>
+<span class="sourceLineNo">4151</span>  /**<a name="line.4151"></a>
+<span class="sourceLineNo">4152</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4152"></a>
+<span class="sourceLineNo">4153</span>   * @param timeoutMillis<a name="line.4153"></a>
+<span class="sourceLineNo">4154</span>   * @param labels<a name="line.4154"></a>
+<span class="sourceLineNo">4155</span>   */<a name="line.4155"></a>
+<span class="sourceLineNo">4156</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4156"></a>
+<span class="sourceLineNo">4157</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4157"></a>
+<span class="sourceLineNo">4158</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4158"></a>
+<span class="sourceLineNo">4159</span><a name="line.4159"></a>
+<span class="sourceLineNo">4160</span>      @Override<a name="line.4160"></a>
+<span class="sourceLineNo">4161</span>      public boolean evaluate() {<a name="line.4161"></a>
+<span class="sourceLineNo">4162</span>        for (String label : labels) {<a name="line.4162"></a>
+<span class="sourceLineNo">4163</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4163"></a>
+<span class="sourceLineNo">4164</span>            return false;<a name="line.4164"></a>
+<span class="sourceLineNo">4165</span>          }<a name="line.4165"></a>
+<span class="sourceLineNo">4166</span>        }<a name="line.4166"></a>
+<span class="sourceLineNo">4167</span>        return true;<a name="line.4167"></a>
+<span class="sourceLineNo">4168</span>      }<a name="line.4168"></a>
+<span class="sourceLineNo">4169</span><a name="line.4169"></a>
+<span class="sourceLineNo">4170</span>      @Override<a name="line.4170"></a>
+<span class="sourceLineNo">4171</span>      public String explainFailure() {<a name="line.4171"></a>
+<span class="sourceLineNo">4172</span>        for (String label : labels) {<a name="line.4172"></a>
+<span class="sourceLineNo">4173</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4173"></a>
+<span class="sourceLineNo">4174</span>            return label + " is not available yet";<a name="line.4174"></a>
+<span class="sourceLineNo">4175</span>          }<a name="line.4175"></a>
+<span class="sourceLineNo">4176</span>        }<a name="line.4176"></a>
+<span class="sourceLineNo">4177</span>        return "";<a name="line.4177"></a>
+<span class="sourceLineNo">4178</span>      }<a name="line.4178"></a>
+<span class="sourceLineNo">4179</span>    });<a name="line.4179"></a>
+<span class="sourceLineNo">4180</span>  }<a name="line.4180"></a>
+<span class="sourceLineNo">4181</span><a name="line.4181"></a>
+<span class="sourceLineNo">4182</span>  /**<a name="line.4182"></a>
+<span class="sourceLineNo">4183</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4183"></a>
+<span class="sourceLineNo">4184</span>   * encoding, bloom codecs available.<a name="line.4184"></a>
+<span class="sourceLineNo">4185</span>   * @return the list of column descriptors<a name="line.4185"></a>
+<span class="sourceLineNo">4186</span>   */<a name="line.4186"></a>
+<span class="sourceLineNo">4187</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4187"></a>
+<span class="sourceLineNo">4188</span>    return generateColumnDescriptors("");<a name="line.4188"></a>
+<span class="sourceLineNo">4189</span>  }<a name="line.4189"></a>
+<span class="sourceLineNo">4190</span><a name="line.4190"></a>
+<span class="sourceLineNo">4191</span>  /**<a name="line.4191"></a>
+<span class="sourceLineNo">4192</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4192"></a>
+<span class="sourceLineNo">4193</span>   * encoding, bloom codecs available.<a name="line.4193"></a>
+<span class="sourceLineNo">4194</span>   * @param prefix family names prefix<a name="line.4194"></a>
+<span class="sourceLineNo">4195</span>   * @return the list of column descriptors<a name="line.4195"></a>
+<span class="sourceLineNo">4196</span>   */<a name="line.4196"></a>
+<span class="sourceLineNo">4197</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4197"></a>
+<span class="sourceLineNo">4198</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4198"></a>
+<span class="sourceLineNo">4199</span>    long familyId = 0;<a name="line.4199"></a>
+<span class="sourceLineNo">4200</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4200"></a>
+<span class="sourceLineNo">4201</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4201"></a>
+<span class="sourceLineNo">4202</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4202"></a>
+<span class="sourceLineNo">4203</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4203"></a>
+<span class="sourceLineNo">4204</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4204"></a>
+<span class="sourceLineNo">4205</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4205"></a>
+<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4206"></a>
+<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4207"></a>
+<span class="sourceLineNo">4208</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4208"></a>
+<span class="sourceLineNo">4209</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4209"></a>
+<span class="sourceLineNo">4210</span>          familyId++;<a name="line.4210"></a>
+<span class="sourceLineNo">4211</span>        }<a name="line.4211"></a>
+<span class="sourceLineNo">4212</span>      }<a name="line.4212"></a>
+<span class="sourceLineNo">4213</span>    }<a name="line.4213"></a>
+<span class="sourceLineNo">4214</span>    return columnFamilyDescriptors;<a name="line.4214"></a>
+<span class="sourceLineNo">4215</span>  }<a name="line.4215"></a>
+<span class="sourceLineNo">4216</span><a name="line.4216"></a>
+<span class="sourceLineNo">4217</span>  /**<a name="line.4217"></a>
+<span class="sourceLineNo">4218</span>   * Get supported compression algorithms.<a name="line.4218"></a>
+<span class="sourceLineNo">4219</span>   * @return supported compression algorithms.<a name="line.4219"></a>
+<span class="sourceLineNo">4220</span>   */<a name="line.4220"></a>
+<span class="sourceLineNo">4221</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4221"></a>
+<span class="sourceLineNo">4222</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4222"></a>
+<span class="sourceLineNo">4223</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4223"></a>
+<span class="sourceLineNo">4224</span>    for (String algoName : allAlgos) {<a name="line.4224"></a>
+<span class="sourceLineNo">4225</span>      try {<a name="line.4225"></a>
+<span class="sourceLineNo">4226</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4226"></a>
+<span class="sourceLineNo">4227</span>        algo.getCompressor();<a name="line.4227"></a>
+<span class="sourceLineNo">4228</span>        supportedAlgos.add(algo);<a name="line.4228"></a>
+<span class="sourceLineNo">4229</span>      } catch (Throwable t) {<a name="line.4229"></a>
+<span class="sourceLineNo">4230</span>        // this algo is not available<a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>      }<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>    }<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>  }<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span><a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    scan.setReadType(ReadType.PREAD);<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    scan.setCaching(1);<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>    scan.setReversed(true);<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    scan.addFamily(family);<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>      scanner.next(cells);<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4245"></a>
+<span class="sourceLineNo">4246</span>        return null;<a name="line.4246"></a>
+<span class="sourceLineNo">4247</span>      }<a name="line.4247"></a>
+<span class="sourceLineNo">4248</span>      return Result.create(cells);<a name="line.4248"></a>
+<span class="sourceLineNo">4249</span>    }<a name="line.4249"></a>
+<span class="sourceLineNo">4250</span>  }<a name="line.4250"></a>
+<span class="sourceLineNo">4251</span><a name="line.4251"></a>
+<span class="sourceLineNo">4252</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4252"></a>
+<span class="sourceLineNo">4253</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4253"></a>
+<span class="sourceLineNo">4254</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4254"></a>
+<span class="sourceLineNo">4255</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4255"></a>
+<span class="sourceLineNo">4256</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4256"></a>
+<span class="sourceLineNo">4257</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4257"></a>
+<span class="sourceLineNo">4258</span>  }<a name="line.4258"></a>
+<span class="sourceLineNo">4259</span><a name="line.4259"></a>
+<span class="sourceLineNo">4260</span>  /**<a name="line.4260"></a>
+<span class="sourceLineNo">4261</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4261"></a>
+<span class="sourceLineNo">4262</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4262"></a>
+<span class="sourceLineNo">4263</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4263"></a>
+<span class="sourceLineNo">4264</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4264"></a>
+<span class="sourceLineNo">4265</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4265"></a>
+<span class="sourceLineNo">4266</span>   * less baggage. It came in in HBASE-5291.<a name="line.4266"></a>
+<span class="sourceLineNo">4267</span>   */<a name="line.4267"></a>
+<span class="sourceLineNo">4268</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4268"></a>
+<span class="sourceLineNo">4269</span>    Properties conf = MiniKdc.createConf();<a name="line.4269"></a>
+<span class="sourceLineNo">4270</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4270"></a>
+<span class="sourceLineNo">4271</span>    MiniKdc kdc = null;<a name="line.4271"></a>
+<span class="sourceLineNo">4272</span>    File dir = null;<a name="line.4272"></a>
+<span class="sourceLineNo">4273</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4273"></a>
+<span class="sourceLineNo">4274</span>    // another service captures the port in between which'll result in BindException.<a name="line.4274"></a>
+<span class="sourceLineNo">4275</span>    boolean bindException;<a name="line.4275"></a>
+<span class="sourceLineNo">4276</span>    int numTries = 0;<a name="line.4276"></a>
+<span class="sourceLineNo">4277</span>    do {<a name="line.4277"></a>
+<span class="sourceLineNo">4278</span>      try {<a name="line.4278"></a>
+<span class="sourceLineNo">4279</span>        bindException = false;<a name="line.4279"></a>
+<span class="sourceLineNo">4280</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4280"></a>
+<span class="sourceLineNo">4281</span>        kdc = new MiniKdc(conf, dir);<a name="line.4281"></a>
+<span class="sourceLineNo">4282</span>        kdc.start();<a name="line.4282"></a>
+<span class="sourceLineNo">4283</span>      } catch (BindException e) {<a name="line.4283"></a>
+<span class="sourceLineNo">4284</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4284"></a>
+<span class="sourceLineNo">4285</span>        numTries++;<a name="line.4285"></a>
+<span class="sourceLineNo">4286</span>        if (numTries == 3) {<a name="line.4286"></a>
+<span class="sourceLineNo">4287</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4287"></a>
+<span class="sourceLineNo">4288</span>          throw e;<a name="line.4288"></a>
+<span class="sourceLineNo">4289</span>        }<a name="line.4289"></a>
+<span class="sourceLineNo">4290</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4290"></a>
+<span class="sourceLineNo">4291</span>        bindException = true;<a name="line.4291"></a>
+<span class="sourceLineNo">4292</span>      }<a name="line.4292"></a>
+<span class="sourceLineNo">4293</span>    } while (bindException);<a name="line.4293"></a>
+<span class="sourceLineNo">4294</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>    return kdc;<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>  }<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span><a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>    int numHFiles = 0;<a name="line.4299"></a>
+<span class="sourceLineNo">4300</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4300"></a>
+<span class="sourceLineNo">4301</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4301"></a>
+<span class="sourceLineNo">4302</span>                                    family);<a name="line.4302"></a>
+<span class="sourceLineNo">4303</span>    }<a name="line.4303"></a>
+<span class="sourceLineNo">4304</span>    return numHFiles;<a name="line.4304"></a>
+<span class="sourceLineNo">4305</span>  }<a name="line.4305"></a>
+<span class="sourceLineNo">4306</span><a name="line.4306"></a>
+<span class="sourceLineNo">4307</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4307"></a>
+<span class="sourceLineNo">4308</span>                               final byte[] family) {<a name="line.4308"></a>
+<span class="sourceLineNo">4309</span>    int numHFiles = 0;<a name="line.4309"></a>
+<span class="sourceLineNo">4310</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4310"></a>
+<span class="sourceLineNo">4311</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4311"></a>
+<span class="sourceLineNo">4312</span>    }<a name="line.4312"></a>
+<span class="sourceLineNo">4313</span>    return numHFiles;<a name="line.4313"></a>
+<span class="sourceLineNo">4314</span>  }<a name="line.4314"></a>
+<span class="sourceLineNo">4315</span><a name="line.4315"></a>
+<span class="sourceLineNo">4316</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4316"></a>
+<span class="sourceLineNo">4317</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4317"></a>
+<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4318"></a>
+<span class="sourceLineNo">4319</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4319"></a>
+<span class="sourceLineNo">4320</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4320"></a>
+<span class="sourceLineNo">4321</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4321"></a>
+<span class="sourceLineNo">4322</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4322"></a>
+<span class="sourceLineNo">4323</span>      assertEquals(0,<a name="line.4323"></a>
+<span class="sourceLineNo">4324</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4324"></a>
+<span class="sourceLineNo">4325</span>    }<a name="line.4325"></a>
+<span class="sourceLineNo">4326</span>  }<a name="line.4326"></a>
+<span class="sourceLineNo">4327</span><a name="line.4327"></a>
+<span class="sourceLineNo">4328</span>  /**<a name="line.4328"></a>
+<span class="sourceLineNo">4329</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4329"></a>
+<span class="sourceLineNo">4330</span>   * invocations.<a name="line.4330"></a>
+<span class="sourceLineNo">4331</span>   */<a name="line.4331"></a>
+<span class="sourceLineNo">4332</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4332"></a>
+<span class="sourceLineNo">4333</span>    throws InterruptedException {<a name="line.4333"></a>
+<span class="sourceLineNo">4334</span>    try {<a name="line.4334"></a>
+<span class="sourceLineNo">4335</span>      while (!condition.getAsBoolean()) {<a name="line.4335"></a>
+<span class="sourceLineNo">4336</span>        Thread.sleep(sleepMillis);<a name="line.4336"></a>
+<span class="sourceLineNo">4337</span>      }<a name="line.4337"></a>
+<span class="sourceLineNo">4338</span>    } catch (RuntimeException e) {<a name="line.4338"></a>
+<span class="sourceLineNo">4339</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4339"></a>
+<span class="sourceLineNo">4340</span>        throw (AssertionError) e.getCause();<a name="line.4340"></a>
+<span class="sourceLineNo">4341</span>      }<a name="line.4341"></a>
+<span class="sourceLineNo">4342</span>      throw e;<a name="line.4342"></a>
+<span class="sourceLineNo">4343</span>    }<a name="line.4343"></a>
+<span class="sourceLineNo">4344</span>  }<a name="line.4344"></a>
+<span class="sourceLineNo">4345</span>}<a name="line.4345"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 2c8561f..67b415f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -88,4268 +88,4269 @@
 <span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.Result;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Table;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.User;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.mapred.JobConf;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.zookeeper.WatchedEvent;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.zookeeper.ZooKeeper;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>/**<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * Facility for testing HBase. Replacement for<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * Not all methods work with the real cluster.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * Depends on log4j being on classpath and<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * logging levels.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * In the configuration properties, default values for master-info-port and<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * avoiding port contention if another local HBase instance is already running).<a name="line.169"></a>
-<span class="sourceLineNo">170</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * setting it to true.<a name="line.171"></a>
-<span class="sourceLineNo">172</span> */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>@InterfaceAudience.Public<a name="line.173"></a>
-<span class="sourceLineNo">174</span>@SuppressWarnings("deprecation")<a name="line.174"></a>
-<span class="sourceLineNo">175</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * used in mini dfs.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  @Deprecated<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * table.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.Table;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.User;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.mapred.JobConf;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.zookeeper.WatchedEvent;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.ZooKeeper;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * Facility for testing HBase. Replacement for<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * Create an instance and keep it around testing HBase.  This class is<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * meant to be your one-stop shop for anything you might need testing.  Manages<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * Not all methods work with the real cluster.<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * Depends on log4j being on classpath and<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * hbase-site.xml for logging and test-run configuration.  It does not set<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * logging levels.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * In the configuration properties, default values for master-info-port and<a name="line.168"></a>
+<span class="sourceLineNo">169</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * avoiding port contention if another local HBase instance is already running).<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * setting it to true.<a name="line.172"></a>
+<span class="sourceLineNo">173</span> */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>@InterfaceAudience.Public<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@SuppressWarnings("deprecation")<a name="line.175"></a>
+<span class="sourceLineNo">176</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * used in mini dfs.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-19410"&gt;HBASE-19410&lt;/a&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
 <span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private MiniDFSCluster dfsCluster = null;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private MiniMRCluster mrCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private volatile boolean miniClusterRunning;<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private String hadoopLogDir;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * HBaseTestingUtility*/<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private Path dataTestDirOnTestFS = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static String FS_URI;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Checks to see if a specific port is available.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param port the port number to check for availability<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public static boolean available(int port) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    ServerSocket ss = null;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    DatagramSocket ds = null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    try {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ss = new ServerSocket(port);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      ss.setReuseAddress(true);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      ds = new DatagramSocket(port);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      ds.setReuseAddress(true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    } catch (IOException e) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // Do nothing<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } finally {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      if (ds != null) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        ds.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ss != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        try {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          ss.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        } catch (IOException e) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          /* should not be thrown */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return false;<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>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * testing.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    for (Compression.Algorithm comprAlgo :<a name="line.260"></a>
-<span class="sourceLineNo">261</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    return Collections.unmodifiableList(configurations);<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>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Create combination of memstoreTS and tags<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    configurations.add(new Object[] { false, false });<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, true });<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    configurations.add(new Object[] { true, false });<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, true });<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return Collections.unmodifiableList(configurations);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    configurations.add(new Object[] { false, false, true });<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, false });<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, true, true });<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, false });<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { true, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    return Collections.unmodifiableList(configurations);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      bloomAndCompressionCombinations();<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private static String FS_URI;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param port the port number to check for availability<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static boolean available(int port) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    ServerSocket ss = null;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    DatagramSocket ds = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    try {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      ss = new ServerSocket(port);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      ss.setReuseAddress(true);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      ds = new DatagramSocket(port);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      ds.setReuseAddress(true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      return true;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    } catch (IOException e) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // Do nothing<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      if (ds != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        ds.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ss != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        try {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          ss.close();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        } catch (IOException e) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          /* should not be thrown */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return false;<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>  /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * testing.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (Compression.Algorithm comprAlgo :<a name="line.261"></a>
+<span class="sourceLineNo">262</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return Collections.unmodifiableList(configurations);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * Create combination of memstoreTS and tags<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    configurations.add(new Object[] { false, false });<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    configurations.add(new Object[] { false, true });<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    configurations.add(new Object[] { true, false });<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    configurations.add(new Object[] { true, true });<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    return Collections.unmodifiableList(configurations);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    configurations.add(new Object[] { false, false, true });<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    configurations.add(new Object[] { false, false, false });<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    configurations.add(new Object[] { false, true, true });<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, true, false });<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { true, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { true, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { true, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return Collections.unmodifiableList(configurations);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      bloomAndCompressionCombinations();<a name="line.296"></a>
 <span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public HBaseTestingUtility() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this(HBaseConfiguration.create());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @param conf The configuration to use for further operations<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    super(conf);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // Save this for when setting default file:// breaks things<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    // Every cluster is a local cluster until we start DFS<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // Note that conf could be null, but this.conf will not be<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    String dataTestDir = getDataTestDir().toString();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // tests opt-out for random port assignment<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    closeRegionAndWAL((HRegion)r);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    if (r == null) return;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    r.close();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (r.getWAL() == null) return;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    r.getWAL().close();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * make a copy and use that.  Do<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return Instance of Configuration.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public Configuration getConfiguration() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return super.getConfiguration();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    this.hbaseCluster = hbaseCluster;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Give it a random name so can have many concurrent tests running if<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * System property, as it's what minidfscluster bases<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * instances -- another instance could grab the temporary<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * single instance only is how the minidfscluster works.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   *<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * We also create the underlying directory names for<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   *<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * @return The calculated data test build directory, if newly-created.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected Path setupDataTestDir() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Path testPath = super.setupDataTestDir();<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (null == testPath) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      "hadoop.log.dir",<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      testPath, "hadoop-log-dir");<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    createSubDirAndSystemProperty(<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      "hadoop.tmp.dir",<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      testPath, "hadoop-tmp-dir");<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    createSubDir(<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      "mapreduce.cluster.local.dir",<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      testPath, "mapred-local-dir");<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return testPath;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private void createSubDirAndSystemProperty(<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    String propertyName, Path parent, String subDirName){<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    String sysValue = System.getProperty(propertyName);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (sysValue != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // There is already a value set. So we do nothing but hope<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      //  that there will be no conflicts<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      String confValue = conf.get(propertyName);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.432"></a>
-<span class="sourceLineNo">433</span>       LOG.warn(<a name="line.433"></a>
-<span class="sourceLineNo">434</span>         propertyName + " property value differs in configuration and system: "+<a name="line.434"></a>
-<span class="sourceLineNo">435</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.435"></a>
-<span class="sourceLineNo">436</span>         " Erasing configuration value by system value."<a name="line.436"></a>
-<span class="sourceLineNo">437</span>       );<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      conf.set(propertyName, sysValue);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } else {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      createSubDir(propertyName, parent, subDirName);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      System.setProperty(propertyName, conf.get(propertyName));<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><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * for the test filesystem by default<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @see #setupDataTestDirOnTestFS()<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @see #getTestFileSystem()<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    FileSystem fs = getTestFileSystem();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * if the test relies on it.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @return a unique path in the test filesystem<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   */<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (dataTestDirOnTestFS == null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      setupDataTestDirOnTestFS();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    return dataTestDirOnTestFS;<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * if the test relies on it.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * @return a unique path in the test filesystem<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>  /**<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * Creates a new directory if not already setup.<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (dataTestDirOnTestFS != null) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          + dataTestDirOnTestFS.toString());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    //the working directory, and create a unique sub dir there<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    FileSystem fs = getTestFileSystem();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    Path newDataTestDir;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    String randomStr = getRandomUUID().toString();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    } else {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      Path base = getBaseTestDirOnTestFS();<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      newDataTestDir = new Path(base, randomStr);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return newDataTestDir;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  /**<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * Cleans the test data directory on the test filesystem.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   * @return True if we removed the test dirs<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * @throws IOException<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   */<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (ret)<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      dataTestDirOnTestFS = null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return ret;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  /**<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return True if we removed child<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @throws IOException<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   */<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    return getTestFileSystem().delete(cpath, true);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  /**<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * Start a minidfscluster.<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param servers How many DNs to start.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @throws Exception<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @see #shutdownMiniDFSCluster()<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * @return The mini dfs cluster created.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return startMiniDFSCluster(servers, null);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   * Start a minidfscluster.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * like HDFS block location verification.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * datanodes will have the same host name.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param hosts hostnames DNs to run on.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   * @throws Exception<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @see #shutdownMiniDFSCluster()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @return The mini dfs cluster created.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  throws Exception {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    } else {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      return startMiniDFSCluster(1, null);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Start a minidfscluster.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Can only create one.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @param servers How many DNs to start.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @param hosts hostnames DNs to run on.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @throws Exception<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * @see #shutdownMiniDFSCluster()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return The mini dfs cluster created.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  throws Exception {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  private void setFs() throws IOException {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    if(this.dfsCluster == null){<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      return;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    // re-enable this check with dfs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throws Exception {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    createDirsAndSetProperties();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      "ERROR");<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        true, null, racks, hosts, null);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // Set this just-started cluster as our filesystem.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    setFs();<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>    // Wait for the cluster to be totally up<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    this.dfsCluster.waitClusterUp();<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    //reset the test directory for test file system<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    dataTestDirOnTestFS = null;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    String dataTestDir = getDataTestDir().toString();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    return this.dfsCluster;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    createDirsAndSetProperties();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      "ERROR");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        null, null, null);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return dfsCluster;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * the conf.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   * &lt;pre&gt;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * &lt;/pre&gt;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    setupClusterTestDir();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    createDirAndSetProperty("test.cache.data");<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    enableShortCircuit();<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      new Path(root, "mapred-output-dir").toString());<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *  new column families. Default to false.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    String v = System.getProperty(propName);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    if (v != null){<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      return Boolean.parseBoolean(v);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    return false;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  /**<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   *  This allows to specify this parameter on the command line.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   *   If not set, default is true.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public boolean isReadShortCircuitOn(){<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    String readOnProp = System.getProperty(propName);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    if (readOnProp != null){<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    } else {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      return conf.getBoolean(propName, false);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  /** Enable the short circuit read, unless configured differently.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   */<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  private void enableShortCircuit() {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    if (isReadShortCircuitOn()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      String curUser = System.getProperty("user.name");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // read short circuit, for hdfs<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // read short circuit, for hbase<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    } else {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      LOG.info("read short circuit is OFF");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  private String createDirAndSetProperty(final String property) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return createDirAndSetProperty(property, property);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String path = getDataTestDir(relPath).toString();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    System.setProperty(property, path);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    conf.set(property, path);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    new File(path).mkdirs();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    return path;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
-<span class="sourceLineNo">746</span><a name="line.746"></a>
-<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * or does nothing.<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @throws IOException<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    if (this.dfsCluster != null) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      this.dfsCluster.shutdown();<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      dfsCluster = null;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      dataTestDirOnTestFS = null;<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  /**<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return The mini HBase cluster created.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @see #shutdownMiniCluster()<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   */<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  @Deprecated<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        .createWALDir(createWALDir).build();<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    return startMiniCluster(option);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  /**<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @return The mini HBase cluster created.<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * @see #shutdownMiniCluster()<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>   */<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  @Deprecated<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  throws Exception {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.795"></a>
-<span class="sourceLineNo">796</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    return startMiniCluster(option);<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>  /**<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @return The mini HBase cluster created.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @see #shutdownMiniCluster()<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   */<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  @Deprecated<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      boolean createWALDir) throws Exception {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        .createWALDir(createWALDir).build();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    return startMiniCluster(option);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  /**<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * @param numMasters Master node number.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @return The mini HBase cluster created.<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @see #shutdownMiniCluster()<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   */<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  @Deprecated<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    throws Exception {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        .numDataNodes(numSlaves).build();<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return startMiniCluster(option);<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>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @param numMasters Master node number.<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return The mini HBase cluster created.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * @see #shutdownMiniCluster()<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.853"></a>
-<span class="sourceLineNo">854</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   */<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  @Deprecated<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    return startMiniCluster(option);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * @param numMasters Master node number.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   *                      HDFS data node number.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return The mini HBase cluster created.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * @see #shutdownMiniCluster()<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
-<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      boolean createRootDir) throws Exception {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.882"></a>
-<span class="sourceLineNo">883</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    return startMiniCluster(option);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * @param numMasters Master node number.<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   *                      HDFS data node number.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * @return The mini HBase cluster created.<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * @see #shutdownMiniCluster()<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   */<a name="line.900"></a>
-<span class="sourceLineNo">901</span>  @Deprecated<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      throws Exception {<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    return startMiniCluster(option);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param numMasters Master node number.<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   * @param numRegionServers Number of region servers.<a name="line.914"></a>
-<span class="sourceLineNo">915</span>   * @param numDataNodes Number of datanodes.<a name="line.915"></a>
-<span class="sourceLineNo">916</span>   * @return The mini HBase cluster created.<a name="line.916"></a>
-<span class="sourceLineNo">917</span>   * @see #shutdownMiniCluster()<a name="line.917"></a>
-<span class="sourceLineNo">918</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  @Deprecated<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      throws Exception {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        .build();<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    return startMiniCluster(option);<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>  /**<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @param numMasters Master node number.<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *                      HDFS data node number.<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * @return The mini HBase cluster created.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   * @see #shutdownMiniCluster()<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   */<a name="line.947"></a>
-<span class="sourceLineNo">948</span>  @Deprecated<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      throws Exception {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.954"></a>
-<span class="sourceLineNo">955</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .build();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return startMiniCluster(option);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @param numMasters Master node number.<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * @param numRegionServers Number of region servers.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * @param numDataNodes Number of datanodes.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.967"></a>
-<span class="sourceLineNo">968</span>   *                      HDFS data node number.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.969"></a>
-<span class="sourceLineNo">970</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return The mini HBase cluster created.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * @see #shutdownMiniCluster()<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   */<a name="line.977"></a>
-<span class="sourceLineNo">978</span>  @Deprecated<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    throws Exception {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        .build();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    return startMiniCluster(option);<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * @param numMasters Master node number.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * @param numRegionServers Number of region servers.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   * @param numDataNodes Number of datanodes.<a name="line.996"></a>
-<span class="sourceLineNo">997</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.997"></a>
-<span class="sourceLineNo">998</span>   *                      HDFS data node number.<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   * @return The mini HBase cluster created.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>   * @see #shutdownMiniCluster()<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  @Deprecated<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      boolean createWALDir) throws Exception {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        .build();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    return startMiniCluster(option);<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>  /**<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   * @see #shutdownMiniDFSCluster()<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>   */<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>    return startMiniCluster(option);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  /**<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @see #shutdownMiniDFSCluster()<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  }<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>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * @see #shutdownMiniDFSCluster()<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   */<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    // If we already put up a cluster, fail.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    if (miniClusterRunning) {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    miniClusterRunning = true;<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    setupClusterTestDir();<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span><a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (dfsCluster == null) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      LOG.info("STARTING DFS");<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    } else {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      LOG.info("NOT STARTING DFS");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // Start up a zk cluster.<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    if (getZkCluster() == null) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      startMiniZKCluster(option.getNumZkServers());<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    // Start the MiniHBaseCluster<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    return startMiniHBaseCluster(option);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>  }<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>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   */<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    throws IOException, InterruptedException {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    createRootDir(option.isCreateRootDir());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    if (option.isCreateWALDir()) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      createWALRootDir();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // for tests that do not read hbase-defaults.xml<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    setHBaseFsTmpDir();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // These settings will make the server waits until this exact number of<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    // regions servers are connected.<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span><a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    Configuration c = new Configuration(this.conf);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      option.getMasterClass(), option.getRsClass());<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>      for (;;) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (s.next() == null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          break;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        }<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><a name="line.1128"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   *<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public HBaseTestingUtility() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this(HBaseConfiguration.create());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  /**<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   *<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @param conf The configuration to use for further operations<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    super(conf);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // Save this for when setting default file:// breaks things<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // Every cluster is a local cluster until we start DFS<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    // Note that conf could be null, but this.conf will not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String dataTestDir = getDataTestDir().toString();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    // tests opt-out for random port assignment<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    closeRegionAndWAL((HRegion)r);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (r == null) return;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    r.close();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    if (r.getWAL() == null) return;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    r.getWAL().close();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * make a copy and use that.  Do<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @return Instance of Configuration.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Configuration getConfiguration() {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return super.getConfiguration();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    this.hbaseCluster = hbaseCluster;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Give it a random name so can have many concurrent tests running if<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * System property, as it's what minidfscluster bases<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * instances -- another instance could grab the temporary<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * single instance only is how the minidfscluster works.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   *<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * We also create the underlying directory names for<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   *  in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   *<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return The calculated data test build directory, if newly-created.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected Path setupDataTestDir() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    Path testPath = super.setupDataTestDir();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (null == testPath) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    createSubDirAndSystemProperty(<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      "hadoop.log.dir",<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      testPath, "hadoop-log-dir");<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    createSubDirAndSystemProperty(<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      "hadoop.tmp.dir",<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      testPath, "hadoop-tmp-dir");<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    createSubDir(<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      "mapreduce.cluster.local.dir",<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      testPath, "mapred-local-dir");<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return testPath;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  private void createSubDirAndSystemProperty(<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    String propertyName, Path parent, String subDirName){<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    String sysValue = System.getProperty(propertyName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sysValue != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      // There is already a value set. So we do nothing but hope<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      //  that there will be no conflicts<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      String confValue = conf.get(propertyName);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.433"></a>
+<span class="sourceLineNo">434</span>       LOG.warn(<a name="line.434"></a>
+<span class="sourceLineNo">435</span>         propertyName + " property value differs in configuration and system: "+<a name="line.435"></a>
+<span class="sourceLineNo">436</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.436"></a>
+<span class="sourceLineNo">437</span>         " Erasing configuration value by system value."<a name="line.437"></a>
+<span class="sourceLineNo">438</span>       );<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      conf.set(propertyName, sysValue);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      createSubDir(propertyName, parent, subDirName);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * for the test filesystem by default<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * @see #setupDataTestDirOnTestFS()<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * @see #getTestFileSystem()<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    FileSystem fs = getTestFileSystem();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * if the test relies on it.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @return a unique path in the test filesystem<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    if (dataTestDirOnTestFS == null) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<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>  /**<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   * if the test relies on it.<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * @return a unique path in the test filesystem<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  /**<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Creates a new directory if not already setup.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    if (dataTestDirOnTestFS != null) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          + dataTestDirOnTestFS.toString());<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      return;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Sets up a new path in test filesystem to be used by tests.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    //the working directory, and create a unique sub dir there<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    FileSystem fs = getTestFileSystem();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    Path newDataTestDir;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    String randomStr = getRandomUUID().toString();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    } else {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      Path base = getBaseTestDirOnTestFS();<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      newDataTestDir = new Path(base, randomStr);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    return newDataTestDir;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>  /**<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * Cleans the test data directory on the test filesystem.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @return True if we removed the test dirs<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   * @throws IOException<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   */<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    if (ret)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      dataTestDirOnTestFS = null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    return ret;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  /**<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.533"></a>
+<span class="sourceLineNo">534</span>   * @return True if we removed child<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * @throws IOException<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    return getTestFileSystem().delete(cpath, true);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * Start a minidfscluster.<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   * @param servers How many DNs to start.<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * @throws Exception<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @see #shutdownMiniDFSCluster()<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * @return The mini dfs cluster created.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   */<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    return startMiniDFSCluster(servers, null);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   * Start a minidfscluster.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   * like HDFS block location verification.<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * datanodes will have the same host name.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param hosts hostnames DNs to run on.<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @throws Exception<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @see #shutdownMiniDFSCluster()<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @return The mini dfs cluster created.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  throws Exception {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    } else {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      return startMiniDFSCluster(1, null);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * Start a minidfscluster.<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Can only create one.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @param servers How many DNs to start.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param hosts hostnames DNs to run on.<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @throws Exception<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @see #shutdownMiniDFSCluster()<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return The mini dfs cluster created.<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   */<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  throws Exception {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  private void setFs() throws IOException {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    if(this.dfsCluster == null){<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      return;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    // re-enable this check with dfs<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      throws Exception {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    createDirsAndSetProperties();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      "ERROR");<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        true, null, racks, hosts, null);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    // Set this just-started cluster as our filesystem.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    setFs();<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>    // Wait for the cluster to be totally up<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    this.dfsCluster.waitClusterUp();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    //reset the test directory for test file system<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    dataTestDirOnTestFS = null;<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    String dataTestDir = getDataTestDir().toString();<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>    return this.dfsCluster;<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    createDirsAndSetProperties();<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      "ERROR");<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        null, null, null);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    return dfsCluster;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.639"></a>
+<span class="sourceLineNo">640</span>   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.640"></a>
+<span class="sourceLineNo">641</span>   * the conf.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>   * &lt;pre&gt;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>   * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * }<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * &lt;/pre&gt;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    setupClusterTestDir();<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    createDirAndSetProperty("test.cache.data");<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    createDirAndSetProperty("hadoop.tmp.dir");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    enableShortCircuit();<a name="line.659"></a>
+<span class="sourceLineNo">660</span><a name="line.660"></a>
+<span class="sourceLineNo">661</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      new Path(root, "mapred-output-dir").toString());<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>    // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    createDirAndSetProperty("nfs.dump.dir");<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    createDirAndSetProperty("java.io.tmpdir");<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  }<a name="line.687"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>  /**<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *  Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   *  new column families. Default to false.<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   */<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  public boolean isNewVersionBehaviorEnabled(){<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final String propName = "hbase.tests.new.version.behavior";<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    String v = System.getProperty(propName);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    if (v != null){<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return Boolean.parseBoolean(v);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    return false;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   *  Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   *  This allows to specify this parameter on the command line.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   *   If not set, default is true.<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   */<a name="line.706"></a>
+<span class="sourceLineNo">707</span>  public boolean isReadShortCircuitOn(){<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    String readOnProp = System.getProperty(propName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (readOnProp != null){<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      return  Boolean.parseBoolean(readOnProp);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    } else {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      return conf.getBoolean(propName, false);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>  /** Enable the short circuit read, unless configured differently.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   */<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  private void enableShortCircuit() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    if (isReadShortCircuitOn()) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      String curUser = System.getProperty("user.name");<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      LOG.info("read short circuit is ON for user " + curUser);<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // read short circuit, for hdfs<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      conf.set("dfs.block.local-path-access.user", curUser);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      // read short circuit, for hbase<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      // Skip checking checksum, for the hdfs client and the datanode<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    } else {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      LOG.info("read short circuit is OFF");<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>  private String createDirAndSetProperty(final String property) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    return createDirAndSetProperty(property, property);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>  }<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>  private String createDirAndSetProperty(final String relPath, String property) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    String path = getDataTestDir(relPath).toString();<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    System.setProperty(property, path);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    conf.set(property, path);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    new File(path).mkdirs();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    return path;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * or does nothing.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @throws IOException<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   */<a name="line.752"></a>
+<span class="sourceLineNo">753</span>  public void shutdownMiniDFSCluster() throws IOException {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    if (this.dfsCluster != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      // The below throws an exception per dn, AsynchronousCloseException.<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      this.dfsCluster.shutdown();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      dfsCluster = null;<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      dataTestDirOnTestFS = null;<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  /**<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @return The mini HBase cluster created.<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @see #shutdownMiniCluster()<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   */<a name="line.773"></a>
+<span class="sourceLineNo">774</span>  @Deprecated<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        .createWALDir(createWALDir).build();<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    return startMiniCluster(option);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>  /**<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.782"></a>
+<span class="sourceLineNo">783</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.783"></a>
+<span class="sourceLineNo">784</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.784"></a>
+<span class="sourceLineNo">785</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.785"></a>
+<span class="sourceLineNo">786</span>   * @return The mini HBase cluster created.<a name="line.786"></a>
+<span class="sourceLineNo">787</span>   * @see #shutdownMiniCluster()<a name="line.787"></a>
+<span class="sourceLineNo">788</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.788"></a>
+<span class="sourceLineNo">789</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.789"></a>
+<span class="sourceLineNo">790</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   */<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  @Deprecated<a name="line.793"></a>
+<span class="sourceLineNo">794</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.794"></a>
+<span class="sourceLineNo">795</span>  throws Exception {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    return startMiniCluster(option);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return The mini HBase cluster created.<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @see #shutdownMiniCluster()<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.809"></a>
+<span class="sourceLineNo">810</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.811"></a>
+<span class="sourceLineNo">812</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.812"></a>
+<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  @Deprecated<a name="line.814"></a>
+<span class="sourceLineNo">815</span>  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>      boolean createWALDir) throws Exception {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.817"></a>
+<span class="sourceLineNo">818</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.818"></a>
+<span class="sourceLineNo">819</span>        .createWALDir(createWALDir).build();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>    return startMiniCluster(option);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param numMasters Master node number.<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @return The mini HBase cluster created.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @see #shutdownMiniCluster()<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   *  {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    throws Exception {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        .numDataNodes(numSlaves).build();<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return startMiniCluster(option);<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @param numMasters Master node number.<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * @return The mini HBase cluster created.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * @see #shutdownMiniCluster()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   */<a name="line.856"></a>
+<span class="sourceLineNo">857</span>  @Deprecated<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    return startMiniCluster(option);<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>  /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * @param numMasters Master node number.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   *                      HDFS data node number.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * @return The mini HBase cluster created.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * @see #shutdownMiniCluster()<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      boolean createRootDir) throws Exception {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.883"></a>
+<span class="sourceLineNo">884</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    return startMiniCluster(option);<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>  /**<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * @param numMasters Master node number.<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   *                      HDFS data node number.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @return The mini HBase cluster created.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * @see #shutdownMiniCluster()<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   */<a name="line.901"></a>
+<span class="sourceLineNo">902</span>  @Deprecated<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      throws Exception {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    return startMiniCluster(option);<a name="line.908"></a>
+<span class="sourceLineNo">909</span>  }<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>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.912"></a>
+<span class="sourceLineNo">913</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.913"></a>
+<span class="sourceLineNo">914</span>   * @param numMasters Master node number.<a name="line.914"></a>
+<span class="sourceLineNo">915</span>   * @param numRegionServers Number of region servers.<a name="line.915"></a>
+<span class="sourceLineNo">916</span>   * @param numDataNodes Number of datanodes.<a name="line.916"></a>
+<span class="sourceLineNo">917</span>   * @return The mini HBase cluster created.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * @see #shutdownMiniCluster()<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.921"></a>
+<span class="sourceLineNo">922</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>   */<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  @Deprecated<a name="line.924"></a>
+<span class="sourceLineNo">925</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.925"></a>
+<span class="sourceLineNo">926</span>      throws Exception {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        .build();<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    return startMiniCluster(option);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>  /**<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @param numMasters Master node number.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   *                      HDFS data node number.<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @return The mini HBase cluster created.<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @see #shutdownMiniCluster()<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
+<span class="sourceLineNo">949</span>  @Deprecated<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      Class&lt;? extends HMaster&gt; masterClass,<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      throws Exception {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.954"></a>
+<span class="sourceLineNo">955</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.955"></a>
+<span class="sourceLineNo">956</span>        .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.956"></a>
+<span class="sourceLineNo">957</span>        .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.957"></a>
+<span class="sourceLineNo">958</span>        .build();<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    return startMiniCluster(option);<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  }<a name="line.960"></a>
+<span class="sourceLineNo">961</span><a name="line.961"></a>
+<span class="sourceLineNo">962</span>  /**<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @param numMasters Master node number.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   * @param numRegionServers Number of region servers.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>   * @param numDataNodes Number of datanodes.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.968"></a>
+<span class="sourceLineNo">969</span>   *                      HDFS data node number.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   * @return The mini HBase cluster created.<a name="line.972"></a>
+<span class="sourceLineNo">973</span>   * @see #shutdownMiniCluster()<a name="line.973"></a>
+<span class="sourceLineNo">974</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.975"></a>
+<span class="sourceLineNo">976</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   */<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  @Deprecated<a name="line.979"></a>
+<span class="sourceLineNo">980</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass)<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    throws Exception {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>        .build();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    return startMiniCluster(option);<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>  /**<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * @param numMasters Master node number.<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * @param numRegionServers Number of region servers.<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * @param numDataNodes Number of datanodes.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   *                      HDFS data node number.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * @return The mini HBase cluster created.<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   * @see #shutdownMiniCluster()<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   *   {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   */<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>  @Deprecated<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      boolean createWALDir) throws Exception {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>        .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        .build();<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    return startMiniCluster(option);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  }<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span><a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>  /**<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * @see #shutdownMiniDFSCluster()<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    return startMiniCluster(option);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>  }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>  /**<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>   * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>   * @see #shutdownMiniDFSCluster()<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   */<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>  public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    return startMiniCluster(StartMiniClusterOption.builder().build());<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>  /**<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * It modifies Configuration.  It homes the cluster data directory under a random<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * @see #shutdownMiniDFSCluster()<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   */<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    LOG.info("Starting up minicluster with option: {}", option);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // If we already put up a cluster, fail.<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    if (miniClusterRunning) {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      throw new IllegalStateException("A mini-cluster is already running");<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    miniClusterRunning = true;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    setupClusterTestDir();<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span><a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    if (dfsCluster == null) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      LOG.info("STARTING DFS");<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    } else {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      LOG.info("NOT STARTING DFS");<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span><a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // Start up a zk cluster.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    if (getZkCluster() == null) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      startMiniZKCluster(option.getNumZkServers());<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>    // Start the MiniHBaseCluster<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   * @return Reference to the hbase mini hbase cluster.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   */<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    throws IOException, InterruptedException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    createRootDir(option.isCreateRootDir());<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    if (option.isCreateWALDir()) {<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      createWALRootDir();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>    // for tests that do not read hbase-defaults.xml<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    setHBaseFsTmpDir();<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span><a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    // These settings will make the server waits until this exact number of<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // regions servers are connected.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span><a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    Configuration c = new Configuration(this.conf);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      option.getMasterClass(), option.getRsClass());<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // Populate the master address configuration from mini cluster configuration.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      ResultScanner s = t.getScanner(new Scan())) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      for (;;) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        if (s.next() == null) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          break;<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>    }<a name="line.1128"></a>
 <span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span><a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    return (MiniHBaseCluster) hbaseCluster;<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>  /**<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * Starts up mini hbase cluster using default options.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   */<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>  /**<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>   * Starts up mini hbase cluster.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>   * @param numMasters Master node number.<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   * @param numRegionServers Number of region servers.<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   * @return The mini HBase cluster created.<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   */<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  @Deprecated<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      throws IOException, InterruptedException {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    return startMiniHBaseCluster(option);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>  }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  /**<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   * Starts up mini hbase cluster.<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>   * @param numMasters Master node number.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>   * @param numRegionServers Number of region servers.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>   * @return The mini HBase cluster created.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>   */<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  @Deprecated<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    return startMiniHBaseCluster(option);<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  /**<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>   * Starts up mini hbase cluster.<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   * @param numMasters Master node number.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   * @param numRegionServers Number of region servers.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>   * @return The mini HBase cluster created.<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   */<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  @Deprecated<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    return startMiniHBaseCluster(option);<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>  /**<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * @param servers number of region servers<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   */<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    this.restartHBaseCluster(servers, null);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      throws IOException, InterruptedException {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    StartMiniClusterOption option =<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    restartHBaseCluster(option);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    invalidateConnection();<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span><a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      throws IOException, InterruptedException {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    closeConnection();<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    this.hbaseCluster =<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>            option.getRsClass());<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    while (s.next() != null) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>      // do nothing<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    LOG.info("HBase has been restarted");<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    s.close();<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    t.close();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    conn.close();<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   * to {@link #startMiniCluster()}.<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @see #startMiniCluster()<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>                               MiniHBaseCluster.class.getName());<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * @see #startMiniCluster(int)<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   */<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    LOG.info("Shutting down minicluster");<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>    shutdownMiniHBaseCluster();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    shutdownMiniDFSCluster();<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    shutdownMiniZKCluster();<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span><a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    cleanupTestDir();<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    miniClusterRunning = false;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    LOG.info("Minicluster is down");<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  }<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   */<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    cleanup();<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    if (this.hbaseCluster != null) {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>      this.hbaseCluster.shutdown();<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      this.hbaseCluster = null;<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (zooKeeperWatcher != null) {<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      zooKeeperWatcher.close();<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      zooKeeperWatcher = null;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  }<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span><a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  /**<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    cleanup();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    if (this.hbaseCluster != null) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      getMiniHBaseCluster().killAll();<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      this.hbaseCluster = null;<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    if (zooKeeperWatcher != null) {<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>      zooKeeperWatcher.close();<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      zooKeeperWatcher = null;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>  }<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  private void cleanup() throws IOException {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    closeConnection();<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  }<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  /**<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>   * before or not. If false, previous path is used.<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>   * Note: this does not cause the root dir to be created.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>   * @throws IOException<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>   */<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    if (!create) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return getDataTestDirOnTestFS();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    } else {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      return getNewDataTestDirOnTestFS();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  /**<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Note: this does not cause the root dir to be created.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   * @throws IOException<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    return getDefaultRootDirPath(false);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>  }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  /**<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>   * method if you were doing manual operation.<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * @param create This flag decides whether to get a new<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   * If directory already exists, it will be overwritten<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   * @return Fully qualified path to hbase root dir<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   * @throws IOException<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   */<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    fs.mkdirs(hbaseRootdir);<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    return hbaseRootdir;<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * @return Fully qualified path to hbase root dir<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   * @throws IOException<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>   */<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  public Path createRootDir() throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>    return createRootDir(false);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span><a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Creates a hbase walDir in the user's home directory.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   * method if you were doing manual operation.<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>   *<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>   * @return Fully qualified path to hbase root dir<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>   * @throws IOException<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>  */<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  public Path createWALRootDir() throws IOException {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    fs.mkdirs(walDir);<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    return walDir;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>  }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span><a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    } else {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>  }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  /**<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>   * Flushes all caches in the mini hbase cluster<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>   * @throws IOException<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>   */<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  public void flush() throws IOException {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    getMiniHBaseCluster().flushcache();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  /**<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>   * Flushes all caches in the mini hbase cluster<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>   * @throws IOException<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>   */<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  public void flush(TableName tableName) throws IOException {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span><a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>   * Compact all regions in the mini hbase cluster<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>   * @throws IOException<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>   */<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>  public void compact(boolean major) throws IOException {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    getMiniHBaseCluster().compact(major);<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span><a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>   * @throws IOException<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>   */<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    getMiniHBaseCluster().compact(tableName, major);<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>   * Create a table.<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>   * @param tableName<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @param family<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   * @return A Table instance for the created table.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   * @throws IOException<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   */<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public Table createTable(TableName tableName, String family)<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  throws IOException{<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    return createTable(tableName, new String[]{family});<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   * Create a table.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>   * @param tableName<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>   * @param families<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>   * @return A Table instance for the created table.<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>   * @throws IOException<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   */<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  throws IOException {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    for (String family : families) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      fams.add(Bytes.toBytes(family));<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  /**<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>   * Create a table.<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>   * @param tableName<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>   * @param family<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>   * @return A Table instance for the created table.<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>   * @throws IOException<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>   */<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>  throws IOException{<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    return createTable(tableName, new byte[][]{family});<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>  /**<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * Create a table with multiple regions.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   * @param tableName<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>   * @param family<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>   * @param numRegions<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>   * @return A Table instance for the created table.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>   * @throws IOException<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>   */<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>      throws IOException {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  /**<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>   * Create a table.<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>   * @param tableName<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>   * @param families<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>   * @return A Table instance for the created table.<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>   * @throws IOException<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>   */<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  throws IOException {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    return createTable(tableName, families, (byte[][]) null);<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>   * Create a table with multiple regions.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>   * @param tableName<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>   * @param families<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>   * @return A Table instance for the created table.<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>   * @throws IOException<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   */<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>  }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span><a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  /**<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>   * Create a table with multiple regions.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>   * @param tableName<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>   * @param replicaCount replica count.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>   * @param families<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>   * @return A Table instance for the created table.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>   * @throws IOException<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   */<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    throws IOException {<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  }<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  /**<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>   * Create a table.<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>   * @param tableName<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>   * @param families<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>   * @param splitKeys<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>   * @return A Table instance for the created table.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>   * @throws IOException<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>   */<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      throws IOException {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Create a table.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   * @param tableName the table name<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>   * @param families the families<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>   * @param splitKeys the splitkeys<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>   * @param replicaCount the region replica count<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>   * @return A Table instance for the created table.<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>   * @throws IOException throws IOException<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>   */<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      int replicaCount) throws IOException {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      new Configuration(getConfiguration()));<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  }<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    // should wait until they are assigned<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    return getConnection().getTable(tableName);<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  /**<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   * Create a table.<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>   * @param c Configuration to use<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>   * @return A Table instance for the created table.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>   */<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    throws IOException {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return createTable(htd, families, null, c);<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>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Create a table.<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   * @param htd table descriptor<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>   * @param families array of column families<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * @param splitKeys array of split keys<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   * @param c Configuration to use<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>   * @return A Table instance for the created table.<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>   */<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      Configuration c) throws IOException {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    // on is interfering.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Create a table.<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   * @param htd table descriptor<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>   * @param families array of column families<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>   * @param splitKeys array of split keys<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>   * @param type Bloom type<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>   * @param blockSize block size<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>   * @param c Configuration to use<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>   * @return A Table instance for the created table.<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   */<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span><a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    for (byte[] family : families) {<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>        .setBloomFilterType(type)<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>        .setBlocksize(blockSize);<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>          cfdb.setNewVersionBehavior(true);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      builder.setColumnFamily(cfdb.build());<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    TableDescriptor td = builder.build();<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    if (splitKeys != null) {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      getAdmin().createTable(td, splitKeys);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    } else {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      getAdmin().createTable(td);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    // we should wait until they are assigned<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    return getConnection().getTable(td.getTableName());<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>  }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  /**<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>   * Create a table.<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>   * @param htd table descriptor<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   * @param splitRows array of split keys<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>   * @return A Table instance for the created table.<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>   * @throws IOException<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>   */<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      throws IOException {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>           .setNewVersionBehavior(true).build());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      }<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    if (splitRows != null) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    } else {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>      getAdmin().createTable(builder.build());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    // we should wait until they are assigned<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return getConnection().getTable(htd.getTableName());<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * Create a table.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param tableName the table name<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param families the families<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @param splitKeys the split keys<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   * @param replicaCount the replica count<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>   * @param c Configuration to use<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>   * @return A Table instance for the created table.<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>   */<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    TableDescriptor htd =<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    return createTable(htd, families, splitKeys, c);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>   * Create a table.<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>   * @return A Table instance for the created table.<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   */<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>  }<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span><a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>  /**<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   * Create a table.<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>   * @return A Table instance for the created table.<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>   */<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      throws IOException {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<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>  /**<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>   * Create a table.<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>   * @return A Table instance for the created table.<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>   */<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      byte[][] splitKeys) throws IOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    for (byte[] family : families) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>        .setMaxVersions(numVersions);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    if (splitKeys != null) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    } else {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      getAdmin().createTable(builder.build());<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    // assigned<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    return getConnection().getTable(tableName);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>  }<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>   * Create a table with multiple regions.<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   * @return A Table instance for the created table.<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>   */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      throws IOException {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span><a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  /**<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   * Create a table.<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>   * @return A Table instance for the created table.<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>   */<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    int numVersions, int blockSize) throws IOException {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    for (byte[] family : families) {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    getAdmin().createTable(builder.build());<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    // assigned<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    return getConnection().getTable(tableName);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span><a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    for (byte[] family : families) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    if (cpName != null) {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      builder.setCoprocessor(cpName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    getAdmin().createTable(builder.build());<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    // assigned<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    return getConnection().getTable(tableName);<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  }<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span><a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>  /**<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>   * Create a table.<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>   * @return A Table instance for the created table.<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>   */<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    throws IOException {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    int i = 0;<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    for (byte[] family : families) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      i++;<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    getAdmin().createTable(builder.build());<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    // assigned<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    return getConnection().getTable(tableName);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>  }<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>   * Create a table.<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>   * @return A Table instance for the created table.<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   */<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    throws IOException {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    // assigned<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Create a table with multiple regions.<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * @return A Table instance for the created table.<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>  }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>  /**<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>   * Modify a table, synchronous.<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>   */<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>  @Deprecated<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      throws IOException, InterruptedException {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>    admin.modifyTable(desc);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * Set the number of Region replicas.<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    throws IOException, InterruptedException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      .setRegionReplication(replicaCount).build();<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    admin.modifyTable(desc);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  /**<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>   * Drop an existing table<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>   * @param tableName existing table<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>   */<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    try {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      getAdmin().disableTable(tableName);<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    } catch (TableNotEnabledException e) {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    }<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    getAdmin().deleteTable(tableName);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>  }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span><a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  /**<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>   * Drop an existing table<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>   * @param tableName existing table<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>   */<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      deleteTable(tableName);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>    } catch (TableNotFoundException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      // ignore<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>  }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span><a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>  // ==========================================================================<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  // Canned table and table descriptor creation<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  private static final int MAXVERSIONS = 3;<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  public static final char FIRST_CHAR = 'a';<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  public static final char LAST_CHAR = 'z';<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span><a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>    return builder.build();<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>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    return builder;<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  }<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>   * @param name Name to give table.<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>   * @return Column descriptor.<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   */<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    int maxVersions) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>    for (byte[] family : families) {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>    }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    return builder.build();<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span><a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  /**<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   * @param startKey the start boundary of the region<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>   * @param endKey the end boundary of the region<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>   * @return a region that writes to local dir for testing<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>   */<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    throws IOException {<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      .setEndKey(endKey).build();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    return createLocalHRegion(hri, desc);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  /**<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   */<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  }<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span><a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>  /**<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>   * @param info regioninfo<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>   * @param conf configuration<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>   * @param desc table descriptor<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>   * @param wal wal for this region.<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>   * @return created hregion<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>   * @throws IOException<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>   */<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      WAL wal) throws IOException {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span><a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>  /**<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>   * @param tableName<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>   * @param startKey<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * @param stopKey<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   * @param isReadOnly<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * @param families<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * @return A region on which you must call<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @throws IOException<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   */<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      throws IOException {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        durability, wal, null, families);<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    builder.setReadOnly(isReadOnly);<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    int i = 0;<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    for (byte[] family : families) {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span><a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>      i++;<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      // Set default to be three versions.<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    builder.setDurability(durability);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    RegionInfo info =<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>  }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span><a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  //<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  // ==========================================================================<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span><a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  /**<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>   * Provide an existing table name to truncate.<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>   * Scans the table and issues a delete for each row read.<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>   * @param tableName existing table<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>   * @return HTable to that new table<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>   * @throws IOException<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>   */<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    Table table = getConnection().getTable(tableName);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    Scan scan = new Scan();<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    for(Result res : resScan) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      Delete del = new Delete(res.getRow());<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>      table.delete(del);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    resScan = table.getScanner(scan);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    resScan.close();<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    return table;<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>  /**<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   * Truncate a table using the admin command.<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param tableName table which must exist.<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @param preserveRegions keep the existing split points<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   * @return HTable for the new table<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>   */<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      IOException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    Admin admin = getAdmin();<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      admin.disableTable(tableName);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>   * Truncate a table using the admin command.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>   * For previous behavior of issuing row deletes, see<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>   * deleteTableData.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>   * Expressly does not preserve regions of existing table.<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>   * @param tableName table which must exist.<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>   * @return HTable for the new table<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>   */<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    return truncateTable(tableName, false);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>  }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span><a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  /**<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>   * @param t Table<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>   * @param f Family<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>   * @return Count of rows loaded.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>   * @throws IOException<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>   */<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    return loadTable(t, new byte[][] {f});<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>  }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span><a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>  /**<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>   * @param t Table<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>   * @param f Family<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>   * @return Count of rows loaded.<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @throws IOException<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   */<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  /**<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   * @param t Table<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>   * @param f Array of Families to load<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>   * @return Count of rows loaded.<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @throws IOException<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   */<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    return loadTable(t, f, null);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  }<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>  /**<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>   * @param t Table<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>   * @param f Array of Families to load<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>   * @return Count of rows loaded.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>   * @throws IOException<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>   */<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    return loadTable(t, f, value, true);<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span><a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>  /**<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * @param t Table<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   * @param f Array of Families to load<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   * @return Count of rows loaded.<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   * @throws IOException<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   */<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      boolean writeToWAL) throws IOException {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>      Put put = new Put(row);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>        byte[] value1 = value != null ? value : row;<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        put.addColumn(f[i], f[i], value1);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      puts.add(put);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>    }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    t.put(puts);<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    return puts.size();<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  }<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span><a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  /** A tracker for tracking and validating table rows<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   */<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  public static class SeenRowTracker {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    int dim = 'z' - 'a' + 1;<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    byte[] startRow;<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    byte[] stopRow;<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span><a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>      this.startRow = startRow;<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>      this.stopRow = stopRow;<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    void reset() {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      for (byte[] row : ROWS) {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span><a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    int i(byte b) {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>      return b - 'a';<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>    public void addRow(byte[] row) {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    }<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>     * all other rows none<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>     */<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    public void validate() {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>            int expectedCount = 0;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>              expectedCount = 1;<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>            }<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>            if (count != expectedCount) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>                  "instead of " + expectedCount);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>    }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  }<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>    return loadRegion(r, f, false);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>  }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span><a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    return loadRegion((HRegion)r, f);<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span><a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  /**<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * @param r Region<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * @param f Family<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   * @param flush flush the cache if true<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>   * @return Count of rows loaded.<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>   * @throws IOException<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>   */<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  throws IOException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    byte[] k = new byte[3];<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    int rowCount = 0;<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          k[0] = b1;<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          k[1] = b2;<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          k[2] = b3;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          Put put = new Put(k);<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>          put.addColumn(f, null, k);<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>          if (r.getWAL() == null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>          }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>          int preRowCount = rowCount;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          int pause = 10;<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>          int maxPause = 1000;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>          while (rowCount == preRowCount) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>            try {<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>              r.put(put);<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>              rowCount++;<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>            } catch (RegionTooBusyException e) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>              Threads.sleep(pause);<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>            }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          }<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>        }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>      }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      if (flush) {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        r.flush(true);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>    }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>    return rowCount;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>      throws IOException {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      Put put = new Put(data);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      put.addColumn(f, null, data);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>      t.put(put);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    }<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      throws IOException {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    Random r = new Random();<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    byte[] row = new byte[rowSize];<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      r.nextBytes(row);<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      Put put = new Put(row);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      t.put(put);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int replicaId)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      throws IOException {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      Get get = new Get(data);<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      get.setReplicaId(replicaId);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      Result result = table.get(get);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      assertTrue(failMsg,<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>          cell.getValueLength()));<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    }<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>  }<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span><a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      throws IOException {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>  }<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span><a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      throws IOException {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      final boolean present) throws IOException {<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>  }<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span><a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      final boolean present) throws IOException {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>      Result result = region.get(new Get(data));<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span><a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      if (!present) continue;<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      assertTrue(failMsg,<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>          cell.getValueLength()));<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    }<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>  }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span><a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      throws IOException {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      Delete delete = new Delete(data);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>      delete.addFamily(f);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      t.delete(delete);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>    }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>  }<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span><a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>  /**<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>   * Return the number of rows in the given table.<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>   * @param table to count rows<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>   * @return count of rows<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>   */<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  public static int countRows(final Table table) throws IOException {<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>    return countRows(table, new Scan());<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>  }<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span><a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      int count = 0;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      while (results.next() != null) {<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        count++;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>      return count;<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    Scan scan = new Scan();<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    for (byte[] family: families) {<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>      scan.addFamily(family);<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    }<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    return countRows(table, scan);<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  }<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span><a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>  /**<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>   * Return the number of rows in the given table.<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>   */<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    Table table = getConnection().getTable(tableName);<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    try {<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      return countRows(table);<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    } finally {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      table.close();<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>  }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span><a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>  public int countRows(final Region region) throws IOException {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    return countRows(region, new Scan());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>  }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span><a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>    try {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      return countRows(scanner);<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    } finally {<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>      scanner.close();<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    }<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  }<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    int scannedCount = 0;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    boolean hasMore = true;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    while (hasMore) {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>      hasMore = scanner.next(results);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      scannedCount += results.size();<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      results.clear();<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>    return scannedCount;<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>  }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span><a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>  /**<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>   */<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span><a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    Scan scan = new Scan();<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    ResultScanner results = table.getScanner(scan);<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>    for (Result res : results) {<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      digest.update(res.getRow());<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>    }<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    results.close();<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>    return digest.toString();<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>  }<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span><a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>  static {<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    int i = 0;<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          ROWS[i][0] = b1;<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>          ROWS[i][1] = b2;<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          ROWS[i][2] = b3;<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>          i++;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        }<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>      }<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    }<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>  }<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span><a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>  public static final byte[][] KEYS = {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>  };<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span><a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>      Bytes.toBytes("bbb"),<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>  };<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>  /**<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>   * want to form a proper range of regions.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>   * @param conf<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>   * @param htd<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>   * @param startKeys<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>   * @return list of region info for regions added to meta<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>   * @throws IOException<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>   */<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  throws IOException {<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    MetaTableAccessor<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>    // add custom ones<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>      int j = (i + 1) % startKeys.length;<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>          .setStartKey(startKeys[i])<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>          .setEndKey(startKeys[j])<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>          .build();<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      newRegions.add(hri);<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    }<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span><a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    meta.close();<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    return newRegions;<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>  }<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span><a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>  /**<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>   */<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      throws IOException {<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    // unless I pass along via the conf.<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<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">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    getAdmin(); // create immediately the hbaseAdmin<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    return (MiniHBaseCluster) hbaseCluster;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Starts up mini hbase cluster using default options.<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>   */<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>  }<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>   * Starts up mini hbase cluster.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * @param numMasters Master node number.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   * @param numRegionServers Number of region servers.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * @return The mini HBase cluster created.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>  @Deprecated<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      throws IOException, InterruptedException {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>        .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    return startMiniHBaseCluster(option);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>  /**<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>   * Starts up mini hbase cluster.<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   * @param numMasters Master node number.<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   * @param numRegionServers Number of region servers.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   * @return The mini HBase cluster created.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   */<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  @Deprecated<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    return startMiniHBaseCluster(option);<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  /**<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>   * Starts up mini hbase cluster.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   * Usually you won't want this.  You'll usually want {@link #startMiniCluster()}.<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   * @param numMasters Master node number.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * @param numRegionServers Number of region servers.<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * @param rsPorts Ports that RegionServer should use.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @param masterClass The class to use as HMaster, or null for default.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   * @param createRootDir Whether to create a new root or data directory path.<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>   * @param createWALDir Whether to create a new WAL directory.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>   * @return The mini HBase cluster created.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>   * @see #shutdownMiniHBaseCluster()<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>   *   {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>   * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  @Deprecated<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass,<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        .numMasters(numMasters).masterClass(masterClass)<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>        .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    return startMiniHBaseCluster(option);<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  }<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span><a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>  /**<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>   * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   * test.  Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   * @param servers number of region servers<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    this.restartHBaseCluster(servers, null);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      throws IOException, InterruptedException {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    StartMiniClusterOption option =<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    restartHBaseCluster(option);<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>    invalidateConnection();<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  }<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span><a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      throws IOException, InterruptedException {<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    closeConnection();<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    this.hbaseCluster =<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>            option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>            option.getRsClass());<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    while (s.next() != null) {<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      // do nothing<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    LOG.info("HBase has been restarted");<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>    s.close();<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    t.close();<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    conn.close();<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * to {@link #startMiniCluster()}.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * @see #startMiniCluster()<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>      return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>                               MiniHBaseCluster.class.getName());<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span><a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>  /**<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * Stops mini hbase, zk, and hdfs clusters.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @see #startMiniCluster(int)<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>  public void shutdownMiniCluster() throws IOException {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    LOG.info("Shutting down minicluster");<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    shutdownMiniHBaseCluster();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    shutdownMiniDFSCluster();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    shutdownMiniZKCluster();<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    cleanupTestDir();<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    miniClusterRunning = false;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    LOG.info("Minicluster is down");<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  }<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  /**<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * @throws java.io.IOException in case command is unsuccessful<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    cleanup();<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    if (this.hbaseCluster != null) {<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>      this.hbaseCluster.shutdown();<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>      // Wait till hbase is down before going on to shutdown zk.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      this.hbaseCluster.waitUntilShutDown();<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      this.hbaseCluster = null;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    if (zooKeeperWatcher != null) {<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>      zooKeeperWatcher.close();<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>      zooKeeperWatcher = null;<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    }<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>   * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>   */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public void killMiniHBaseCluster() throws IOException {<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    cleanup();<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    if (this.hbaseCluster != null) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      getMiniHBaseCluster().killAll();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      this.hbaseCluster = null;<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    if (zooKeeperWatcher != null) {<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      zooKeeperWatcher.close();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      zooKeeperWatcher = null;<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>  // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  private void cleanup() throws IOException {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    closeConnection();<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    // unset the configuration for MIN and MAX RS to start<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>  }<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span><a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  /**<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>   * before or not. If false, previous path is used.<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   * Note: this does not cause the root dir to be created.<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * @throws IOException<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   */<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    if (!create) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      return getDataTestDirOnTestFS();<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    } else {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      return getNewDataTestDirOnTestFS();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  /**<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>   * Note: this does not cause the root dir to be created.<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * @return Fully qualified path for the default hbase root dir<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  public Path getDefaultRootDirPath() throws IOException {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    return getDefaultRootDirPath(false);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>  }<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /**<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>   * Creates an hbase rootdir in user home directory.  Also creates hbase<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>   * version file.  Normally you won't make use of this method.  Root hbasedir<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * is created for you as part of mini cluster startup.  You'd only use this<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * method if you were doing manual operation.<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * @param create This flag decides whether to get a new<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * root or data directory path or not, if it has been fetched already.<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * If directory already exists, it will be overwritten<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   * @return Fully qualified path to hbase root dir<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @throws IOException<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public Path createRootDir(boolean create) throws IOException {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>    fs.mkdirs(hbaseRootdir);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>    return hbaseRootdir;<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  /**<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * except that &lt;code&gt;create&lt;/code&gt; flag is false.<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * @return Fully qualified path to hbase root dir<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * @throws IOException<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public Path createRootDir() throws IOException {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    return createRootDir(false);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  }<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>   * Creates a hbase walDir in the user's home directory.<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * is created for you as part of mini cluster startup. You'd only use this<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   * method if you were doing manual operation.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   *<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>   * @return Fully qualified path to hbase root dir<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>   * @throws IOException<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  */<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public Path createWALRootDir() throws IOException {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    FileSystem fs = FileSystem.get(this.conf);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    Path walDir = getNewDataTestDirOnTestFS();<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    fs.mkdirs(walDir);<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    return walDir;<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  private void setHBaseFsTmpDir() throws IOException {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>    if (hbaseFsTmpDirInString == null) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>      this.conf.set("hbase.fs.tmp.dir",  getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    } else {<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    }<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>  }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>  /**<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   * Flushes all caches in the mini hbase cluster<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>   * @throws IOException<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>   */<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>  public void flush() throws IOException {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    getMiniHBaseCluster().flushcache();<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>  }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>  /**<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>   * Flushes all caches in the mini hbase cluster<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>   * @throws IOException<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>   */<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  public void flush(TableName tableName) throws IOException {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    getMiniHBaseCluster().flushcache(tableName);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  }<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>   * Compact all regions in the mini hbase cluster<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>   * @throws IOException<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   */<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  public void compact(boolean major) throws IOException {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    getMiniHBaseCluster().compact(major);<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>  }<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span><a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  /**<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   * Compact all of a table's reagion in the mini hbase cluster<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>   * @throws IOException<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>   */<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    getMiniHBaseCluster().compact(tableName, major);<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>  /**<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   * Create a table.<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   * @param tableName<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   * @param family<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @return A Table instance for the created table.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   * @throws IOException<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  public Table createTable(TableName tableName, String family)<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  throws IOException{<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    return createTable(tableName, new String[]{family});<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>  }<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span><a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>  /**<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   * Create a table.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   * @param tableName<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>   * @param families<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>   * @return A Table instance for the created table.<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>   * @throws IOException<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  public Table createTable(TableName tableName, String[] families)<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>  throws IOException {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    for (String family : families) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      fams.add(Bytes.toBytes(family));<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /**<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * Create a table.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   * @param tableName<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   * @param family<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>   * @return A Table instance for the created table.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>   * @throws IOException<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>   */<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public Table createTable(TableName tableName, byte[] family)<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  throws IOException{<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    return createTable(tableName, new byte[][]{family});<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  }<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * Create a table with multiple regions.<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * @param tableName<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   * @param family<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>   * @param numRegions<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>   * @return A Table instance for the created table.<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>   * @throws IOException<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>      throws IOException {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span><a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>  }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  /**<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   * Create a table.<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   * @param tableName<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>   * @param families<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>   * @return A Table instance for the created table.<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>   * @throws IOException<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>   */<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  public Table createTable(TableName tableName, byte[][] families)<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  throws IOException {<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    return createTable(tableName, families, (byte[][]) null);<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>  /**<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>   * Create a table with multiple regions.<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>   * @param tableName<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>   * @param families<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>   * @return A Table instance for the created table.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>   * @throws IOException<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>   */<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>  }<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>   * Create a table with multiple regions.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>   * @param tableName<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>   * @param replicaCount replica count.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>   * @param families<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>   * @return A Table instance for the created table.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>   * @throws IOException<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   */<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    throws IOException {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  /**<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>   * Create a table.<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>   * @param tableName<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>   * @param families<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>   * @param splitKeys<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>   * @return A Table instance for the created table.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>   * @throws IOException<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>   */<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      throws IOException {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span><a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>  /**<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>   * Create a table.<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>   * @param tableName the table name<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>   * @param families the families<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>   * @param splitKeys the splitkeys<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * @param replicaCount the region replica count<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   * @return A Table instance for the created table.<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>   * @throws IOException throws IOException<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>   */<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>      int replicaCount) throws IOException {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      new Configuration(getConfiguration()));<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>    byte[] endKey, int numRegions) throws IOException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span><a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    // should wait until they are assigned<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return getConnection().getTable(tableName);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span><a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>  /**<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   * Create a table.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>   * @param c Configuration to use<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>   * @return A Table instance for the created table.<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>   */<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    throws IOException {<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    return createTable(htd, families, null, c);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>  }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span><a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>  /**<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>   * Create a table.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>   * @param htd table descriptor<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>   * @param families array of column families<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>   * @param splitKeys array of split keys<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>   * @param c Configuration to use<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   * @return A Table instance for the created table.<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>   * @throws IOException if getAdmin or createTable fails<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      Configuration c) throws IOException {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    // on is interfering.<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>  /**<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   * Create a table.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>   * @param htd table descriptor<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   * @param families array of column families<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>   * @param splitKeys array of split keys<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>   * @param type Bloom type<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>   * @param blockSize block size<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>   * @param c Configuration to use<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>   * @return A Table instance for the created table.<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>   * @throws IOException if getAdmin or createTable fails<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>  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    for (byte[] family : families) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        .setBloomFilterType(type)<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>        .setBlocksize(blockSize);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>          cfdb.setNewVersionBehavior(true);<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      builder.setColumnFamily(cfdb.build());<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    }<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    TableDescriptor td = builder.build();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    if (splitKeys != null) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      getAdmin().createTable(td, splitKeys);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    } else {<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      getAdmin().createTable(td);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    // we should wait until they are assigned<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>    waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    return getConnection().getTable(td.getTableName());<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>  }<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>  /**<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   * Create a table.<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>   * @param htd table descriptor<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>   * @param splitRows array of split keys<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>   * @return A Table instance for the created table.<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>   * @throws IOException<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>   */<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      throws IOException {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>         builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>           .setNewVersionBehavior(true).build());<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    if (splitRows != null) {<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      getAdmin().createTable(builder.build(), splitRows);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    } else {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      getAdmin().createTable(builder.build());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    // we should wait until they are assigned<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    return getConnection().getTable(htd.getTableName());<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>  }<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span><a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>  /**<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>   * Create a table.<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>   * @param tableName the table name<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   * @param families the families<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   * @param splitKeys the split keys<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>   * @param replicaCount the replica count<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>   * @param c Configuration to use<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>   * @return A Table instance for the created table.<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>   */<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    int replicaCount, final Configuration c) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>    TableDescriptor htd =<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>    return createTable(htd, families, splitKeys, c);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>  }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span><a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>  /**<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   * Create a table.<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>   * @return A Table instance for the created table.<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>  }<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span><a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  /**<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>   * Create a table.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>   * @return A Table instance for the created table.<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>   */<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      throws IOException {<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    return createTable(tableName, families, numVersions, (byte[][]) null);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>  }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  /**<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>   * Create a table.<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>   * @return A Table instance for the created table.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>   */<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      byte[][] splitKeys) throws IOException {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    for (byte[] family : families) {<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        .setMaxVersions(numVersions);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    }<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    if (splitKeys != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      getAdmin().createTable(builder.build(), splitKeys);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    } else {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      getAdmin().createTable(builder.build());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    // assigned<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    return getConnection().getTable(tableName);<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>  }<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span><a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>  /**<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>   * Create a table with multiple regions.<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>   * @return A Table instance for the created table.<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>   */<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      throws IOException {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>  }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span><a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>  /**<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>   * Create a table.<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * @return A Table instance for the created table.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   */<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>    int numVersions, int blockSize) throws IOException {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    for (byte[] family : families) {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      }<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    getAdmin().createTable(builder.build());<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    // assigned<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    return getConnection().getTable(tableName);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span><a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>  public Table createTable(TableName tableName, byte[][] families,<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    for (byte[] family : families) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>        .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      }<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>    }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    if (cpName != null) {<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      builder.setCoprocessor(cpName);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    }<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    getAdmin().createTable(builder.build());<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    // assigned<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    return getConnection().getTable(tableName);<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>  }<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span><a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  /**<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>   * Create a table.<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>   * @return A Table instance for the created table.<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>   */<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    throws IOException {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    int i = 0;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>    for (byte[] family : families) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>      }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      i++;<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    getAdmin().createTable(builder.build());<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    // assigned<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>    return getConnection().getTable(tableName);<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>  /**<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>   * Create a table.<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>   * @return A Table instance for the created table.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>   */<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    throws IOException {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    if (isNewVersionBehaviorEnabled()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      cfBuilder.setNewVersionBehavior(true);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>    builder.setColumnFamily(cfBuilder.build());<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    getAdmin().createTable(builder.build(), splitRows);<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    // assigned<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    waitUntilAllRegionsAssigned(tableName);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>    return getConnection().getTable(tableName);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span><a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>  /**<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>   * Create a table with multiple regions.<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>   * @return A Table instance for the created table.<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>   */<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>  }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span><a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  /**<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>   * Modify a table, synchronous.<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>   *   {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>   * @see Admin#modifyTable(TableDescriptor)<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>   */<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>  @Deprecated<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      throws IOException, InterruptedException {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    admin.modifyTable(desc);<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>  }<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>   * Set the number of Region replicas.<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    throws IOException, InterruptedException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      .setRegionReplication(replicaCount).build();<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    admin.modifyTable(desc);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  /**<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>   * Drop an existing table<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>   * @param tableName existing table<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>   */<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  public void deleteTable(TableName tableName) throws IOException {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>    try {<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      getAdmin().disableTable(tableName);<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>    } catch (TableNotEnabledException e) {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    getAdmin().deleteTable(tableName);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>  }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span><a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  /**<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>   * Drop an existing table<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>   * @param tableName existing table<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>   */<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>  public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    try {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      deleteTable(tableName);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>    } catch (TableNotFoundException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      // ignore<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>  // ==========================================================================<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>  // Canned table and table descriptor creation<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span><a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>  public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  private static final int MAXVERSIONS = 3;<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  public static final char FIRST_CHAR = 'a';<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  public static final char LAST_CHAR = 'z';<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>    return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>  }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>    return builder.build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  }<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span><a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    return builder;<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>   * Create a table of name &lt;code&gt;name&lt;/code&gt;.<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>   * @param name Name to give table.<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>   * @return Column descriptor.<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>   */<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>  public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  }<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span><a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    int maxVersions) {<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    for (byte[] family : families) {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>      if (isNewVersionBehaviorEnabled()) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        cfBuilder.setNewVersionBehavior(true);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>      }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    return builder.build();<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>  }<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span><a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>  /**<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>   * Create an HRegion that writes to the local tmp dirs<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * @param desc a table descriptor indicating which table the region belongs to<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * @param startKey the start boundary of the region<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * @param endKey the end boundary of the region<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * @return a region that writes to local dir for testing<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   */<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    throws IOException {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      .setEndKey(endKey).build();<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>    return createLocalHRegion(hri, desc);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  }<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span><a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>  /**<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>  /**<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>   * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>   * @param info regioninfo<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>   * @param conf configuration<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>   * @param desc table descriptor<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>   * @param wal wal for this region.<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>   * @return created hregion<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>   * @throws IOException<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>   */<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      WAL wal) throws IOException {<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>  }<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>  /**<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>   * @param tableName<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>   * @param startKey<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>   * @param stopKey<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>   * @param isReadOnly<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>   * @param families<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>   * @return A region on which you must call<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>   * @throws IOException<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>   */<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      throws IOException {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        durability, wal, null, families);<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>  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    builder.setReadOnly(isReadOnly);<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    int i = 0;<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    for (byte[] family : families) {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      } else {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span><a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      }<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      i++;<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      // Set default to be three versions.<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    builder.setDurability(durability);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    RegionInfo info =<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span><a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  //<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  // ==========================================================================<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span><a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  /**<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>   * Provide an existing table name to truncate.<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>   * Scans the table and issues a delete for each row read.<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>   * @param tableName existing table<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>   * @return HTable to that new table<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>   * @throws IOException<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>   */<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>  public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    Table table = getConnection().getTable(tableName);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    Scan scan = new Scan();<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    ResultScanner resScan = table.getScanner(scan);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    for(Result res : resScan) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      Delete del = new Delete(res.getRow());<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>      table.delete(del);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    resScan = table.getScanner(scan);<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    resScan.close();<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    return table;<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>  }<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span><a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  /**<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * Truncate a table using the admin command.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   * @param tableName table which must exist.<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param preserveRegions keep the existing split points<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @return HTable for the new table<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   */<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>  public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>      IOException {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    Admin admin = getAdmin();<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    if (!admin.isTableDisabled(tableName)) {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      admin.disableTable(tableName);<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    admin.truncateTable(tableName, preserveRegions);<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    return getConnection().getTable(tableName);<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>  }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span><a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  /**<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>   * Truncate a table using the admin command.<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>   * Effectively disables, deletes, and recreates the table.<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * For previous behavior of issuing row deletes, see<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * deleteTableData.<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * Expressly does not preserve regions of existing table.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   * @param tableName table which must exist.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>   * @return HTable for the new table<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>   */<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    return truncateTable(tableName, false);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * @param t Table<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * @param f Family<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   * @return Count of rows loaded.<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>   * @throws IOException<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>   */<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>  public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    return loadTable(t, new byte[][] {f});<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>  }<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>   * Load table with rows from 'aaa' to 'zzz'.<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>   * @param t Table<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>   * @param f Family<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>   * @return Count of rows loaded.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>   * @throws IOException<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>   */<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span><a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>  /**<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>   * @param t Table<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>   * @param f Array of Families to load<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>   * @return Count of rows loaded.<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>   * @throws IOException<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>   */<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>  public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    return loadTable(t, f, null);<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  }<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span><a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  /**<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>   * @param t Table<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>   * @param f Array of Families to load<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>   * @return Count of rows loaded.<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>   * @throws IOException<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>   */<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    return loadTable(t, f, value, true);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span><a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>  /**<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>   * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   * @param t Table<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>   * @param f Array of Families to load<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>   * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>   * @return Count of rows loaded.<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>   * @throws IOException<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>   */<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>  public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      boolean writeToWAL) throws IOException {<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      Put put = new Put(row);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      for (int i = 0; i &lt; f.length; i++) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>        byte[] value1 = value != null ? value : row;<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>        put.addColumn(f[i], f[i], value1);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      puts.add(put);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>    t.put(puts);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    return puts.size();<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>  }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span><a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  /** A tracker for tracking and validating table rows<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>   * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  public static class SeenRowTracker {<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>    int dim = 'z' - 'a' + 1;<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>    int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    byte[] startRow;<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    byte[] stopRow;<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span><a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>      this.startRow = startRow;<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>      this.stopRow = stopRow;<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    }<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span><a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    void reset() {<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      for (byte[] row : ROWS) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>      }<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span><a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    int i(byte b) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>      return b - 'a';<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span><a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    public void addRow(byte[] row) {<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>    }<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span><a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>     * all other rows none<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>     */<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    public void validate() {<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>            int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>            int expectedCount = 0;<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>            if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) &gt;= 0<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>                &amp;&amp; Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) &lt; 0) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>              expectedCount = 1;<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>            }<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>            if (count != expectedCount) {<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>              String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>                  "instead of " + expectedCount);<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>            }<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>          }<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        }<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<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>  public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    return loadRegion(r, f, false);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>    return loadRegion((HRegion)r, f);<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span><a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>   * Load region with rows from 'aaa' to 'zzz'.<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>   * @param r Region<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>   * @param f Family<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>   * @param flush flush the cache if true<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>   * @return Count of rows loaded.<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>   * @throws IOException<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>   */<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>  public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>  throws IOException {<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    byte[] k = new byte[3];<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    int rowCount = 0;<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>          k[0] = b1;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>          k[1] = b2;<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>          k[2] = b3;<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          Put put = new Put(k);<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          put.setDurability(Durability.SKIP_WAL);<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>          put.addColumn(f, null, k);<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>          if (r.getWAL() == null) {<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>            put.setDurability(Durability.SKIP_WAL);<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>          }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>          int preRowCount = rowCount;<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>          int pause = 10;<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>          int maxPause = 1000;<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>          while (rowCount == preRowCount) {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>            try {<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>              r.put(put);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>              rowCount++;<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>            } catch (RegionTooBusyException e) {<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>              Threads.sleep(pause);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>            }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>      }<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      if (flush) {<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>        r.flush(true);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>    }<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return rowCount;<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      throws IOException {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      Put put = new Put(data);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      put.addColumn(f, null, data);<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>      t.put(put);<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>  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      throws IOException {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    Random r = new Random();<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    byte[] row = new byte[rowSize];<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>    for (int i = 0; i &lt; totalRows; i++) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      r.nextBytes(row);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>      Put put = new Put(row);<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>      put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      t.put(put);<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span><a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      int replicaId)<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>      throws IOException {<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      Get get = new Get(data);<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      get.setReplicaId(replicaId);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      get.setConsistency(Consistency.TIMELINE);<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>      Result result = table.get(get);<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      assertTrue(failMsg,<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          cell.getValueLength()));<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>    }<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  }<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span><a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      throws IOException {<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    verifyNumericRows(region, f, startRow, endRow, true);<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>  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      final boolean present) throws IOException {<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>    verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      final boolean present) throws IOException {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      String failMsg = "Failed verification of row :" + i;<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      Result result = region.get(new Get(data));<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span><a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>      boolean hasResult = result != null &amp;&amp; !result.isEmpty();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>      assertEquals(failMsg + result, present, hasResult);<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      if (!present) continue;<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span><a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>      assertTrue(failMsg, result.containsColumn(f, null));<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      Cell cell = result.getColumnLatestCell(f, null);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      assertTrue(failMsg,<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>        Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>          cell.getValueLength()));<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>    }<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>  }<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span><a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      throws IOException {<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    for (int i = startRow; i &lt; endRow; i++) {<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      Delete delete = new Delete(data);<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>      delete.addFamily(f);<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      t.delete(delete);<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>    }<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>  }<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span><a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>  /**<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>   * Return the number of rows in the given table.<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>   * @param table to count rows<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>   * @return count of rows<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   */<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>  public static int countRows(final Table table) throws IOException {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>    return countRows(table, new Scan());<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>  }<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    try (ResultScanner results = table.getScanner(scan)) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      int count = 0;<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      while (results.next() != null) {<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        count++;<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>      }<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>      return count;<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>  public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    Scan scan = new Scan();<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    for (byte[] family: families) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>      scan.addFamily(family);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    }<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return countRows(table, scan);<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  /**<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>   * Return the number of rows in the given table.<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>   */<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  public int countRows(final TableName tableName) throws IOException {<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    Table table = getConnection().getTable(tableName);<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    try {<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      return countRows(table);<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      table.close();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>  }<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span><a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>  public int countRows(final Region region) throws IOException {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    return countRows(region, new Scan());<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span><a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>  public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    InternalScanner scanner = region.getScanner(scan);<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    try {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      return countRows(scanner);<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>    } finally {<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>      scanner.close();<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    }<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>  }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>  public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>    int scannedCount = 0;<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>    boolean hasMore = true;<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>    while (hasMore) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>      hasMore = scanner.next(results);<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      scannedCount += results.size();<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>      results.clear();<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>    return scannedCount;<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  }<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span><a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>  /**<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>   * Return an md5 digest of the entire contents of a table.<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>   */<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>  public String checksumRows(final Table table) throws Exception {<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span><a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    Scan scan = new Scan();<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    ResultScanner results = table.getScanner(scan);<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>    MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>    for (Result res : results) {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>      digest.update(res.getRow());<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>    }<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>    results.close();<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>    return digest.toString();<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>  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>  static {<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>    int i = 0;<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          ROWS[i][0] = b1;<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>          ROWS[i][1] = b2;<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>          ROWS[i][2] = b3;<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>          i++;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        }<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      }<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span><a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  public static final byte[][] KEYS = {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>    HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>    Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>    Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>    Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>    Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>    Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>    Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<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>  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      Bytes.toBytes("bbb"),<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>      Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>      Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>      Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>      Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>      Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>      Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  };<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span><a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>  /**<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>   * start keys.  The first startKey should be a 0 length byte array if you<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>   * want to form a proper range of regions.<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>   * @param conf<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>   * @param htd<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>   * @param startKeys<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>   * @return list of region info for regions added to meta<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>   * @throws IOException<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>   */<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>      final TableDescriptor htd, byte [][] startKeys)<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>  throws IOException {<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    MetaTableAccessor<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>        .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    // add custom ones<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    for (int i = 0; i &lt; startKeys.length; i++) {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      int j = (i + 1) % startKeys.length;<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>          .setStartKey(startKeys[i])<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>          .setEndKey(startKeys[j])<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>          .build();<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>      newRegions.add(hri);<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span><a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    meta.close();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>    return newRegions;<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  }<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span><a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  /**<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>   * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>   */<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>      throws IOException {<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>    // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>    // unless I pass along via the conf.<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>    Configuration confForWAL = new Configuration(conf);<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>  }<a name="line.2508"></a>
 <span class="sourceLineNo">2509</span><a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  /**<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   */<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  /**<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   */<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws IOException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    region.setBlockCache(blockCache);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>    region.initialize();<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>   */<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      throws IOException {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>    region.setMobFileCache(mobFileCache);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    region.initialize();<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>    return region;<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>  }<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span><a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>  /**<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>   */<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      throws IOException {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>  }<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span><a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>  /**<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   * Returns all rows from the hbase:meta table.<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>   *<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>   * @throws IOException When reading the rows fails.<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>   */<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>    for (Result result : s) {<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      rows.add(result.getRow());<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>    }<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>    s.close();<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>    t.close();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>    return rows;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>  }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  /**<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>   *<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>   * @throws IOException When reading the rows fails.<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>   */<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    for (Result result : s) {<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      if (info == null) {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        // TODO figure out what to do for this new hosed case.<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      if (info.getTable().equals(tableName)) {<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        rows.add(result.getRow());<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>    }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    s.close();<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    t.close();<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>    return rows;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>  }<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span><a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>  /**<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>   * Returns all regions of the specified table<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>   *<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>   * @param tableName the table name<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>   * @return all regions of the specified table<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>   * @throws IOException when getting the regions fails.<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>   */<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      return admin.getRegions(tableName);<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>  }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span><a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>  /*<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>   * @param rs<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>   * @return another region server<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>   */<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        return rst.getRegionServer();<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      }<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    return null;<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>  /**<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>   * Tool to get the reference to the region server object that holds the<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>   * region of the specified user table.<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>   * @throws IOException<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @throws InterruptedException<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      throws IOException, InterruptedException {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>    if (regions == null || regions.isEmpty()) {<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      return null;<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>    }<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>        tableName);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    byte[] firstRegionName = regions.stream()<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>        .filter(r -&gt; !r.isOffline())<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        .map(RegionInfo::getRegionName)<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        .findFirst()<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>    while(retrier.shouldRetry()) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      if (index != -1) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      retrier.sleepUntilNextRetry();<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    }<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return null;<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span><a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   *<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @throws IOException When starting the cluster fails.<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   */<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    conf.setIfUnset(<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        "99.0");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    startMiniMapReduceCluster(2);<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    return mrCluster;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  }<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span><a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>  /**<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>   * will not change its internal static LOG_DIR variable.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>   */<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>  private void forceChangeTaskLogDir() {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>    Field logDirField;<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>    try {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      logDirField.setAccessible(true);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span><a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      modifiersField.setAccessible(true);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>    } catch (SecurityException e) {<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>      throw new RuntimeException(e);<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>    } catch (NoSuchFieldException e) {<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      throw new RuntimeException(e);<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>    } catch (IllegalArgumentException e) {<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>      throw new RuntimeException(e);<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    } catch (IllegalAccessException e) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      throw new RuntimeException(e);<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>  }<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span><a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>  /**<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>   * filesystem.<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>   * @throws IOException When starting the cluster fails.<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>   */<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    if (mrCluster != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>    }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>    setupClusterTestDir();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>    createDirsAndSetProperties();<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span><a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>    forceChangeTaskLogDir();<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>    //// hadoop2 specific settings<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>    // we up the VM usable so that processes don't get killed.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span><a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    ////<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span><a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      null, null, new JobConf(this.conf));<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    if (jobConf == null) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      jobConf = mrCluster.createJobConf();<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span><a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span><a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>    // this for mrv2 support; mr1 ignores this<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>    if (rmAddress != null) {<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>    }<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>    if (historyAddress != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    }<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    String schedulerAddress =<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    if (schedulerAddress != null) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    String mrJobHistoryWebappAddress =<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    String yarnRMWebappAddress =<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>    if (yarnRMWebappAddress != null) {<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>    }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>  }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span><a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>  /**<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>   */<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    if (mrCluster != null) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      mrCluster.shutdown();<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>      mrCluster = null;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>    }<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Restore configuration to point to local jobtracker<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    conf.set("mapreduce.jobtracker.address", "local");<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>  /**<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>   */<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return createMockRegionServerService((ServerName)null);<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  /**<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>   * This version is used by TestTokenAuthentication<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      IOException {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>    rss.setRpcServer(rpc);<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return rss;<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  /**<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>   * This version is used by TestOpenRegionHandler<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   */<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>    return rss;<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span><a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  /**<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   */<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>  @Deprecated<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    Log4jUtils.enableDebug(clazz);<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  /**<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>   * Expire the Master's session<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>   * @throws Exception<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  public void expireMasterSession() throws Exception {<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>    expireSession(master.getZooKeeper(), false);<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>  }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span><a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  /**<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   * Expire a region server's session<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>   * @param index which RS<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>   */<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    decrementMinRegionServerCount();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  }<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span><a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  private void decrementMinRegionServerCount() {<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    // this.hbaseCluster shares this configuration too<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span><a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>    // each master thread keeps a copy of configuration<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<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><a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    int currentCount = conf.getInt(<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>    if (currentCount != -1) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>          Math.max(currentCount - 1, 1));<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>  }<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span><a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>   expireSession(nodeZK, false);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>  }<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span><a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  /**<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>   * There are issues when doing this:<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>   *<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>   *                    current configuration.<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>   */<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    throws Exception {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    Configuration c = new Configuration(this.conf);<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    byte[] password = zk.getSessionPasswd();<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>    long sessionID = zk.getSessionId();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    //  so we create a first watcher to be sure that the<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    //  other watchers on the same machine will get is as well.<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>    //  closing the connection should be enough.<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>      @Override<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    } , sessionID, password);<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span><a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    // Making it expire<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span><a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    while (newZK.getState() != States.CONNECTED<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>       Thread.sleep(1);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>    newZK.close();<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span><a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>    monitor.close();<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span><a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    if (checkStatus) {<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    }<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>  }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  /**<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>   * Get the Mini HBase cluster.<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>   *<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * @return hbase cluster<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * @see #getHBaseClusterInterface()<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   */<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    return getMiniHBaseCluster();<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  }<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  /**<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>   * Returns the HBaseCluster instance.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>   * need to type-cast.<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>   */<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    //but this would require refactoring 90+ calls.<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    return hbaseCluster;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  /**<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>   * the connection is not valid anymore.<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>   */<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>  public void invalidateConnection() throws IOException {<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    closeConnection();<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    // Update the master addresses if they changed.<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>        masterConfigBefore, masterConfAfter);<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  }<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>   * Get a shared Connection to the cluster.<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>   * this method is thread safe.<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>   */<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public Connection getConnection() throws IOException {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return getAsyncConnection().toConnection();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * Get a assigned Connection to the cluster.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * this method is thread safe.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * @param user assigned user<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * @return A Connection with assigned user.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Connection getConnection(User user) throws IOException {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    return getAsyncConnection(user).toConnection();<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>  /**<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>   * this method is thread safe.<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>   */<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>    try {<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        if (connection == null) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>          try {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>            connection = getAsyncConnection(user);<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>          } catch(IOException ioe) {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>          }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        }<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>        return connection;<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>      });<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    } catch (UncheckedIOException exception) {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>      throw exception.getCause();<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    }<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  }<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>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>   * this method is thread safe.<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>   * @param user assigned user<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>   */<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  }<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span><a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  public void closeConnection() throws IOException {<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    if (hbaseAdmin != null) {<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>      Closeables.close(hbaseAdmin, true);<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>      hbaseAdmin = null;<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    if (asyncConnection != null) {<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>      Closeables.close(asyncConnection, true);<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><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>    if (hbaseAdmin == null){<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    }<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return hbaseAdmin;<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>  private Admin hbaseAdmin = null;<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span><a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  /**<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   */<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public Hbck getHbck() throws IOException {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    return getConnection().getHbck();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span><a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>  /**<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>   * Unassign the named region.<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   *<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   * @param regionName  The region to unassign.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>   */<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    unassignRegion(Bytes.toBytes(regionName));<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>  }<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>   * Unassign the named region.<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>   *<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>   * @param regionName  The region to unassign.<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>   */<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    getAdmin().unassign(regionName, true);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  }<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  /**<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>   * Closes the region containing the given row.<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>   *<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @param row  The row to find the containing region.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param table  The table to find the region.<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>  }<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span><a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>  /**<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   * Closes the region containing the given row.<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>   *<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>   * @param row  The row to find the containing region.<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>   * @param table  The table to find the region.<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>   * @throws IOException<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>   */<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>  }<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span><a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  /**<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * Retrieves a splittable region randomly from tableName<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * @param tableName name of table<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>   */<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>    int regCount = regions.size();<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>    int idx;<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    int attempts = 0;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>    do {<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      if (regCount != regions.size()) {<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>        // if there was region movement, clear attempted Set<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>        attempted.clear();<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>      }<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      regCount = regions.size();<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>      if (regCount &gt; 0) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>        idx = random.nextInt(regCount);<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        // if we have just tried this region, there is no need to try again<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        if (attempted.contains(idx)) {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>          continue;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>        }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>        HRegion region = regions.get(idx);<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>        if (region.checkSplit().isPresent()) {<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>          return region;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>        attempted.add(idx);<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      }<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>      attempts++;<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return null;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    return dfsCluster;<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span><a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>    setDFSCluster(cluster, true);<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  }<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span><a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>  /**<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * Set the MiniDFSCluster<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param cluster cluster to use<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   * it is set.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>   */<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>      throws IllegalStateException, IOException {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>    this.dfsCluster = cluster;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>    this.setFs();<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    return HFileSystem.get(conf);<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  }<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span><a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>  /**<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>   * (30 seconds).<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>   * @param table Table to wait on.<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>   * @throws InterruptedException<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>   * @throws IOException<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>   */<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  public void waitTableAvailable(TableName table)<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      throws InterruptedException, IOException {<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span><a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>      throws InterruptedException, IOException {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>  }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span><a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>  /**<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>   * Wait until all regions in a table have been assigned<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>   * @param table Table to wait on.<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>   * @param timeoutMillis Timeout.<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>   */<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>      throws InterruptedException, IOException {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>  }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span><a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        .getRegionStates().getRegionAssignments();<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        ServerName sn = metaLocation.getSecond();<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        if (!assignments.containsKey(hri)) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span><a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        } else if (sn == null) {<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>        }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>      }<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>    }<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>      throws IOException {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    if (tableState == null) {<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } else if (!tableState.inStates(state)) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>    } else {<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>      return "TableState in META: OK";<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>    }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>  }<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span><a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>  @Nullable<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>      @Override<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>      public boolean visit(Result r) throws IOException {<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>          return false;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>        }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>        if (state != null) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>          lastTableState.set(state);<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>        }<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>        return true;<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>      }<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>    };<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>    return lastTableState.get();<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>  }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span><a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>  /**<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>   * Tolerates nonexistent table.<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>   * @param table the table to wait on.<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>   * @throws IOException if an IO problem is encountered<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>   */<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>  public void waitTableEnabled(TableName table)<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      throws InterruptedException, IOException {<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    waitTableEnabled(table, 30000);<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>  }<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span><a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>  /**<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * regions have been all assigned.<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>   * @param table Table to wait on.<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>   * @throws InterruptedException<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>   * @throws IOException<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>   */<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>  throws InterruptedException, IOException {<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>  throws IOException {<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>  }<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span><a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>  /**<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>   * Will timeout after default period (30 seconds)<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>   * @param table Table to wait on.<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>   * @throws InterruptedException<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>   * @throws IOException<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>   */<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>  public void waitTableDisabled(byte[] table)<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>          throws InterruptedException, IOException {<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>    waitTableDisabled(table, 30000);<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>  }<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span><a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>          throws InterruptedException, IOException {<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>  }<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span><a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  /**<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>   * @param table Table to wait on.<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @throws InterruptedException<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   * @throws IOException<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>   */<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>          throws InterruptedException, IOException {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>  /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * Make sure that at least the specified number of region servers<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   * are running<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   * @param num minimum number of region servers that should be running<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>   * @return true if we started some servers<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>   * @throws IOException<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>   */<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>      throws IOException {<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>    boolean startedServer = false;<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>      startedServer = true;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>    }<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span><a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>    return startedServer;<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>  }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span><a name="line.3339"></a>
+<span class="sourceLineNo">2510</span><a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  /**<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>   */<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>  }<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span><a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>  /**<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>   */<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>      final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      throws IOException {<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>    region.setBlockCache(blockCache);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    region.initialize();<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    return region;<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>   * Create a region with it's own WAL. Be sure to call<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>   */<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>      final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      throws IOException {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>    region.setMobFileCache(mobFileCache);<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>    region.initialize();<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    return region;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>  }<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span><a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>  /**<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>   * Create a region with it's own WAL. Be sure to call<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>   */<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>      final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      throws IOException {<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>      0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    WAL wal = createWal(conf, rootDir, info);<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>  }<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span><a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>  /**<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>   * Returns all rows from the hbase:meta table.<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   *<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @throws IOException When reading the rows fails.<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   */<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    // TODO: Redo using MetaTableAccessor class<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>    for (Result result : s) {<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>      LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>        Bytes.toStringBinary(result.getRow()));<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      rows.add(result.getRow());<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    }<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>    s.close();<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>    t.close();<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>    return rows;<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  }<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span><a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  /**<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>   * Returns all rows from the hbase:meta table for a given user table<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>   *<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * @throws IOException When reading the rows fails.<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   */<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>    // TODO: Redo using MetaTableAccessor.<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>    Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    ResultScanner s = t.getScanner(new Scan());<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    for (Result result : s) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>      if (info == null) {<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>        LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>        // TODO figure out what to do for this new hosed case.<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>        continue;<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span><a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      if (info.getTable().equals(tableName)) {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        LOG.info("getMetaTableRows: row -&gt; " +<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>            Bytes.toStringBinary(result.getRow()) + info);<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>        rows.add(result.getRow());<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      }<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    s.close();<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>    t.close();<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>    return rows;<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  }<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span><a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>  /**<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>   * Returns all regions of the specified table<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>   *<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>   * @param tableName the table name<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>   * @return all regions of the specified table<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * @throws IOException when getting the regions fails.<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   */<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    try (Admin admin = getConnection().getAdmin()) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      return admin.getRegions(tableName);<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>  }<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span><a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>  /*<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>   * Find any other region server which is different from the one identified by parameter<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>   * @param rs<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>   * @return another region server<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>   */<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>  public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>      if (!(rst.getRegionServer() == rs)) {<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>        return rst.getRegionServer();<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>      }<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>    }<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    return null;<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>  }<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>  /**<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>   * Tool to get the reference to the region server object that holds the<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>   * region of the specified user table.<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>   * @param tableName user table to lookup in hbase:meta<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>   * @return region server that holds it, null if the row doesn't exist<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>   * @throws IOException<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>   * @throws InterruptedException<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>   */<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>  public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      throws IOException, InterruptedException {<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    List&lt;RegionInfo&gt; regions = getRegions(tableName);<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (regions == null || regions.isEmpty()) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      return null;<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    }<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>    LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        tableName);<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span><a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    byte[] firstRegionName = regions.stream()<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        .filter(r -&gt; !r.isOffline())<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>        .map(RegionInfo::getRegionName)<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>        .findFirst()<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>    RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    while(retrier.shouldRetry()) {<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>      int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      if (index != -1) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      // Came back -1.  Region may not be online yet.  Sleep a while.<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      retrier.sleepUntilNextRetry();<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    return null;<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  /**<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * &lt;code&gt;TaskTracker&lt;/code&gt;'s.<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   *<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   * @throws IOException When starting the cluster fails.<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>  public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    conf.setIfUnset(<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>        "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>        "99.0");<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    startMiniMapReduceCluster(2);<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>    return mrCluster;<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>  }<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span><a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>  /**<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * will not change its internal static LOG_DIR variable.<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  private void forceChangeTaskLogDir() {<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>    Field logDirField;<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    try {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>      logDirField.setAccessible(true);<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>      Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      modifiersField.setAccessible(true);<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>    } catch (SecurityException e) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>      throw new RuntimeException(e);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>    } catch (NoSuchFieldException e) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>      throw new RuntimeException(e);<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    } catch (IllegalArgumentException e) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      throw new RuntimeException(e);<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    } catch (IllegalAccessException e) {<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>      throw new RuntimeException(e);<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>    }<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>  }<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span><a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>  /**<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>   * filesystem.<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>   * @param servers  The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>   * @throws IOException When starting the cluster fails.<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>   */<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>    if (mrCluster != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>      throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>    }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>    LOG.info("Starting mini mapreduce cluster...");<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>    setupClusterTestDir();<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>    createDirsAndSetProperties();<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    forceChangeTaskLogDir();<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span><a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>    //// hadoop2 specific settings<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    // we up the VM usable so that processes don't get killed.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span><a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    // this avoids the problem by disabling speculative task execution in tests.<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>    conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>    ////<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span><a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>    // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    mrCluster = new MiniMRCluster(servers,<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>      FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>      null, null, new JobConf(this.conf));<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>    if (jobConf == null) {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>      jobConf = mrCluster.createJobConf();<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    }<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span><a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    jobConf.set("mapreduce.cluster.local.dir",<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>      conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>    LOG.info("Mini mapreduce cluster started");<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span><a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>    // Our HBase MR jobs need several of these settings in order to properly run.  So we copy the<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>    // necessary config properties here.  YARN-129 required adding a few properties.<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    // this for mrv2 support; mr1 ignores this<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    conf.set("mapreduce.framework.name", "yarn");<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    conf.setBoolean("yarn.is.minicluster", true);<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>    String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (rmAddress != null) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    if (historyAddress != null) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>      conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>    String schedulerAddress =<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>      jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>    if (schedulerAddress != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    }<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>    String mrJobHistoryWebappAddress =<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>      jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>    if (mrJobHistoryWebappAddress != null) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>    }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    String yarnRMWebappAddress =<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>      jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    if (yarnRMWebappAddress != null) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>  }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span><a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>  /**<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   */<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>  public void shutdownMiniMapReduceCluster() {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>    if (mrCluster != null) {<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      LOG.info("Stopping mini mapreduce cluster...");<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      mrCluster.shutdown();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      mrCluster = null;<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      LOG.info("Mini mapreduce cluster stopped");<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>    }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>    // Restore configuration to point to local jobtracker<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    conf.set("mapreduce.jobtracker.address", "local");<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>  }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span><a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>  /**<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>   */<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>  public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return createMockRegionServerService((ServerName)null);<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   * This version is used by TestTokenAuthentication<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>   */<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>      IOException {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    rss.setRpcServer(rpc);<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return rss;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  /**<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>   * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>   * This version is used by TestOpenRegionHandler<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>   */<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    rss.setFileSystem(getTestFileSystem());<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return rss;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * Switches the logger for the given class to DEBUG level.<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * @param clazz The class for which to switch to debug logging.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>   *             HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>   *             framework you are using then set the log level to debug is very easy.<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>   */<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>  @Deprecated<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>  public void enableDebug(Class&lt;?&gt; clazz) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>    Log4jUtils.enableDebug(clazz);<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span><a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>  /**<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * Expire the Master's session<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   * @throws Exception<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>   */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>  public void expireMasterSession() throws Exception {<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    expireSession(master.getZooKeeper(), false);<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>  }<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>   * Expire a region server's session<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @param index which RS<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>    decrementMinRegionServerCount();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span><a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>  private void decrementMinRegionServerCount() {<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    // decrement the count for this.conf, for newly spwaned master<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>    // this.hbaseCluster shares this configuration too<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    decrementMinRegionServerCount(getConfiguration());<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>    // each master thread keeps a copy of configuration<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>    for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      decrementMinRegionServerCount(master.getMaster().getConfiguration());<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>    }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  }<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span><a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>    int currentCount = conf.getInt(<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    if (currentCount != -1) {<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>          Math.max(currentCount - 1, 1));<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    }<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span><a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>  public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>   expireSession(nodeZK, false);<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>  }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  /**<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>   * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   * There are issues when doing this:<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>   *<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>   * @param nodeZK - the ZK watcher to expire<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>   * @param checkStatus - true to check if we can create a Table with the<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>   *                    current configuration.<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   */<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>  public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    throws Exception {<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>    Configuration c = new Configuration(this.conf);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>    byte[] password = zk.getSessionPasswd();<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    long sessionID = zk.getSessionId();<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span><a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    //  so we create a first watcher to be sure that the<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>    //  event was sent. We expect that if our watcher receives the event<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    //  other watchers on the same machine will get is as well.<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>    // When we ask to close the connection, ZK does not close it before<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    //  we receive all the events, so don't have to capture the event, just<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    //  closing the connection should be enough.<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>      1000, new org.apache.zookeeper.Watcher(){<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>      @Override<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>      public void process(WatchedEvent watchedEvent) {<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>        LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>      }<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    } , sessionID, password);<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span><a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    // Making it expire<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>        1000, EmptyWatcher.instance, sessionID, password);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span><a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>    //ensure that we have connection to the server before closing down, otherwise<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>    //the close session event will be eaten out before we start CONNECTING state<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    while (newZK.getState() != States.CONNECTED<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>         &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000) {<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>       Thread.sleep(1);<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    }<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>    newZK.close();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span><a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    // Now closing &amp; waiting to be sure that the clients get it.<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>    monitor.close();<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>    if (checkStatus) {<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>  }<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>   * Get the Mini HBase cluster.<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>   *<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return hbase cluster<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   * @see #getHBaseClusterInterface()<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  public MiniHBaseCluster getHBaseCluster() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    return getMiniHBaseCluster();<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>  }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>  /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>   * Returns the HBaseCluster instance.<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>   * &lt;p&gt;Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>   * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>   * distributed one. If the test only works on a mini cluster, then specific<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>   * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>   * need to type-cast.<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   */<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  public HBaseCluster getHBaseClusterInterface() {<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>    //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    //but this would require refactoring 90+ calls.<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    return hbaseCluster;<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>  }<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>   * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>   * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>   * the connection is not valid anymore.<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>   * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>   *   written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>   *   the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   *   maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public void invalidateConnection() throws IOException {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    closeConnection();<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    // Update the master addresses if they changed.<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>        masterConfigBefore, masterConfAfter);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>        getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<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>  /**<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   * Get a shared Connection to the cluster.<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * this method is thread safe.<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   */<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public Connection getConnection() throws IOException {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return getAsyncConnection().toConnection();<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * Get a assigned Connection to the cluster.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   * this method is thread safe.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>   * @param user assigned user<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>   * @return A Connection with assigned user.<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>   */<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>  public Connection getConnection(User user) throws IOException {<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    return getAsyncConnection(user).toConnection();<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * Get a shared AsyncClusterConnection to the cluster.<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   * this method is thread safe.<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    try {<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>      return asyncConnection.updateAndGet(connection -&gt; {<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>        if (connection == null) {<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>          try {<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>            User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>            connection = getAsyncConnection(user);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>          } catch(IOException ioe) {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>            throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>          }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        }<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>        return connection;<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>      });<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>    } catch (UncheckedIOException exception) {<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>      throw exception.getCause();<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    }<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>  /**<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>   * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>   * this method is thread safe.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>   * @param user assigned user<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>   * @return An AsyncClusterConnection with assigned user.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>   */<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  public void closeConnection() throws IOException {<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>    if (hbaseAdmin != null) {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>      Closeables.close(hbaseAdmin, true);<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>      hbaseAdmin = null;<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>    if (asyncConnection != null) {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>      Closeables.close(asyncConnection, true);<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span><a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>  /**<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>   * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>   * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public synchronized Admin getAdmin() throws IOException {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    if (hbaseAdmin == null){<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>      this.hbaseAdmin = getConnection().getAdmin();<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>    }<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>    return hbaseAdmin;<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  }<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span><a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  private Admin hbaseAdmin = null;<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  public Hbck getHbck() throws IOException {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return getConnection().getHbck();<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span><a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>   * Unassign the named region.<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>   *<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>   * @param regionName  The region to unassign.<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>   */<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  public void unassignRegion(String regionName) throws IOException {<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>    unassignRegion(Bytes.toBytes(regionName));<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>  /**<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>   * Unassign the named region.<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>   *<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>   * @param regionName  The region to unassign.<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>   */<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>  public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    getAdmin().unassign(regionName, true);<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>  }<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span><a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>  /**<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>   * Closes the region containing the given row.<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>   *<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>   * @param row  The row to find the containing region.<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>   * @param table  The table to find the region.<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>   */<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>    unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>  }<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>   * Closes the region containing the given row.<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>   *<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>   * @param row  The row to find the containing region.<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>   * @param table  The table to find the region.<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>   * @throws IOException<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>   */<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>    HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    unassignRegion(hrl.getRegion().getRegionName());<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Retrieves a splittable region randomly from tableName<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * @param tableName name of table<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>   * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>   */<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>    int regCount = regions.size();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>    int idx;<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    int attempts = 0;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    do {<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      regions = getHBaseCluster().getRegions(tableName);<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>      if (regCount != regions.size()) {<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>        // if there was region movement, clear attempted Set<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>        attempted.clear();<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>      }<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>      regCount = regions.size();<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      // There are chances that before we get the region for the table from an RS the region may<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>      // be going for CLOSE.  This may be because online schema change is enabled<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>      if (regCount &gt; 0) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>        idx = random.nextInt(regCount);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>        // if we have just tried this region, there is no need to try again<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>        if (attempted.contains(idx)) {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>          continue;<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>        }<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        HRegion region = regions.get(idx);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        if (region.checkSplit().isPresent()) {<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>          return region;<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>        }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>        attempted.add(idx);<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>      attempts++;<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>    } while (maxAttempts == -1 || attempts &lt; maxAttempts);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    return null;<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  }<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span><a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>  public MiniDFSCluster getDFSCluster() {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>    return dfsCluster;<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>  }<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    setDFSCluster(cluster, true);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span><a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>  /**<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>   * Set the MiniDFSCluster<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>   * @param cluster cluster to use<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>   * it is set.<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>   * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>   * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>   */<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>      throws IllegalStateException, IOException {<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>    }<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    this.dfsCluster = cluster;<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>    this.setFs();<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>  }<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span><a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>  public FileSystem getTestFileSystem() throws IOException {<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    return HFileSystem.get(conf);<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>  /**<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>   * Wait until all regions in a table have been assigned.  Waits default timeout before giving up<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>   * (30 seconds).<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>   * @param table Table to wait on.<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>   * @throws InterruptedException<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>   * @throws IOException<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>   */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>  public void waitTableAvailable(TableName table)<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>      throws InterruptedException, IOException {<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    waitTableAvailable(table.getName(), 30000);<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>  }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      throws InterruptedException, IOException {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span><a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  /**<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>   * Wait until all regions in a table have been assigned<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>   * @param table Table to wait on.<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>   * @param timeoutMillis Timeout.<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>   */<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>  public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>      throws InterruptedException, IOException {<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<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>  public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    String msg = explainTableState(tableName, TableState.State.ENABLED) + ", ";<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        .getRegionStates().getRegionAssignments();<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>        RegionInfo hri = metaLocation.getFirst();<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>        ServerName sn = metaLocation.getSecond();<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>        if (!assignments.containsKey(hri)) {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>          msg += ", region " + hri + " not assigned, but found in meta, it expected to be on " + sn;<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span><a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>        } else if (sn == null) {<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>          msg += ",  region " + hri + " assigned,  but has no server in meta";<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>        } else if (!sn.equals(assignments.get(hri))) {<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          msg += ",  region " + hri + " assigned,  but has different servers in meta and AM ( " +<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>            sn + " &lt;&gt; " + assignments.get(hri);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>        }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>      }<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    }<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    return msg;<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>  public String explainTableState(final TableName table, TableState.State state)<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>      throws IOException {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>    if (tableState == null) {<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>      return "TableState in META: No table state in META for table " + table +<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>        " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    } else if (!tableState.inStates(state)) {<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>      return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>    } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>      return "TableState in META: OK";<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>    }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>  }<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span><a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>  @Nullable<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>      @Override<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>      public boolean visit(Result r) throws IOException {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>        if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>          return false;<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>        }<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>        TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>        if (state != null) {<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>          lastTableState.set(state);<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>        }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>        return true;<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>      }<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>    };<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>    MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>      ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>    return lastTableState.get();<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>  }<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span><a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>  /**<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   * regions have been all assigned.  Will timeout after default period (30 seconds)<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * Tolerates nonexistent table.<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   * @param table the table to wait on.<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @throws InterruptedException if interrupted while waiting<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @throws IOException if an IO problem is encountered<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   */<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>  public void waitTableEnabled(TableName table)<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>      throws InterruptedException, IOException {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    waitTableEnabled(table, 30000);<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  }<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span><a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>  /**<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>   * Waits for a table to be 'enabled'.  Enabled means that table is set as 'enabled' and the<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>   * regions have been all assigned.<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>   * @see #waitTableEnabled(TableName, long)<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>   * @param table Table to wait on.<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>   * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>   * @throws InterruptedException<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>   * @throws IOException<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>   */<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>  public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>  throws InterruptedException, IOException {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>  }<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span><a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>  public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>  throws IOException {<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>  }<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span><a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>  /**<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>   * Will timeout after default period (30 seconds)<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>   * @param table Table to wait on.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>   * @throws InterruptedException<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>   * @throws IOException<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>   */<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>  public void waitTableDisabled(byte[] table)<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>          throws InterruptedException, IOException {<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>    waitTableDisabled(table, 30000);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>  }<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span><a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>  public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>          throws InterruptedException, IOException {<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>    waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span><a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>  /**<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>   * Waits for a table to be 'disabled'.  Disabled means that table is set as 'disabled'<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>   * @param table Table to wait on.<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>   * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>   * @throws InterruptedException<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>   * @throws IOException<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>   */<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>  public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>          throws InterruptedException, IOException {<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>    waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  }<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span><a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>  /**<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>   * Make sure that at least the specified number of region servers<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>   * are running<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>   * @param num minimum number of region servers that should be running<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>   * @return true if we started some servers<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>   * @throws IOException<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>   */<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>  public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      throws IOException {<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    boolean startedServer = false;<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i&lt;num; ++i) {<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>      LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>      startedServer = true;<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>    }<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span><a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>    return startedServer;<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  }<a name="line.3339"></a>
 <span class="sourceLineNo">3340</span><a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>  /**<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * Make sure that at least the specified number of region servers<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * stopped.<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   * @param num minimum number of region servers that should be running<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>   * @return true if we started some servers<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>   * @throws IOException<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>   */<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    throws IOException {<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span><a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    int nonStoppedServers = 0;<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span><a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>      } else {<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>        nonStoppedServers++;<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>      }<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>    }<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      startedServer = true;<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    }<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return startedServer;<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
+<span class="sourceLineNo">3341</span><a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>  /**<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>   * Make sure that at least the specified number of region servers<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>   * are running. We don't count the ones that are currently stopping or are<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>   * stopped.<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>   * @param num minimum number of region servers that should be running<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>   * @return true if we started some servers<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>   * @throws IOException<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>   */<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>    throws IOException {<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>    boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    int nonStoppedServers = 0;<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    for (JVMClusterUtil.RegionServerThread rst :<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span><a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>      HRegionServer hrs = rst.getRegionServer();<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      } else {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        nonStoppedServers++;<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      }<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>    }<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>    for (int i=nonStoppedServers; i&lt;num; ++i) {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      startedServer = true;<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    return startedServer;<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>  }<a name="line.3370"></a>
 <span class="sourceLineNo">3371</span><a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>  /**<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>   * @param c Initial configuration<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>   * @return A new configuration instance with a different user set into it.<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>   * @throws IOException<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>   */<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>  public static User getDifferentUser(final Configuration c,<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>    final String differentiatingSuffix)<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>  throws IOException {<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>      return User.getCurrent();<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>    }<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>    String username = User.getCurrent().getName() +<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      differentiatingSuffix;<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>    User user = User.createUserForTesting(c, username,<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>        new String[]{"supergroup"});<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return user;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>      throws IOException {<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>      try {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>        for (RegionInfo region :<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>          online.add(region.getRegionNameAsString());<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>        }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>      } catch (RegionServerStoppedException e) {<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>        // That's fine.<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      }<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>    }<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>      try {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>        for (RegionInfo region :<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>          online.add(region.getRegionNameAsString());<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>        }<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>      } catch (RegionServerStoppedException e) {<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>        // That's fine.<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      } catch (ServerNotRunningYetException e) {<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>        // That's fine.<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>      }<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>    return online;<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  }<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  /**<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>   * &lt;pre&gt;<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * &lt;/pre&gt;<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   * @param max<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @throws NoSuchFieldException<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   * @throws SecurityException<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>   * @throws IllegalAccessException<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>   * @throws IllegalArgumentException<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>   */<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      final int max) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>    try {<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>        String className = clazz.getSimpleName();<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>        if (className.equals("DFSOutputStream")) {<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>          if (clazz.isInstance(stream)) {<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>            Field maxRecoveryErrorCountField =<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>            break;<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>          }<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>        }<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>      }<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>    } catch (Exception e) {<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>      LOG.info("Could not set max recovery field", e);<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  }<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span><a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>  /**<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * has completed assignment.<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * @return true if the region is assigned false otherwise.<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   */<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>      throws IOException, InterruptedException {<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>    am.assign(regionInfo);<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  /**<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>   *<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>   * @param destRegion region to move<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>   * @param destServer destination server of the region<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>   * @throws InterruptedException<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>   * @throws IOException<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>   */<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>      throws InterruptedException, IOException {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>    while (true) {<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>          .getRegionServerOfRegion(destRegion);<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>        break;<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      }<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>      Thread.sleep(10);<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>    }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>  }<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span><a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>  /**<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>   * This means all regions have been deployed,<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>   * server.<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>   * @param tableName the table name<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>   * @throws IOException<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>   */<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span><a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>   * Waith until all system table's regions get assigned<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>   * @throws IOException<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  }<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span><a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  /**<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>   * server.<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>   * @param tableName the table name<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>   * @param timeout timeout, in milliseconds<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>   * @throws IOException<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>   */<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>      throws IOException {<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>            timeout + "ms");<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>          @Override<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>          public String explainFailure() throws IOException {<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>            return explainTableAvailability(tableName);<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>          }<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span><a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>          @Override<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>          public boolean evaluate() throws IOException {<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>            Scan scan = new Scan();<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>            boolean tableFound = false;<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>                  // (for fault tolerance testing).<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>                  tableFound = true;<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>                  byte[] server =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>                  if (server == null) {<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>                    return false;<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>                  } else {<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>                    byte[] startCode =<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>                    ServerName serverName =<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>                            Bytes.toLong(startCode));<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>                      return false;<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>                    }<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>                  }<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>                    return false;<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>                  }<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>                }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>              }<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>            }<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>            if (!tableFound) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>            }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>            return tableFound;<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>          }<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>        });<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>      }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>    }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>    // check from the master state if we are using a mini cluster<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>      // returning -- sometimes this can lag.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>        @Override<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>        public String explainFailure() throws IOException {<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>          return explainTableAvailability(tableName);<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>        }<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span><a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>        @Override<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>        public boolean evaluate() throws IOException {<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>        }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>      });<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>    }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  }<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span><a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>  /**<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>   * Do a small get/scan against one store. This is required because store<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>   */<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>                                                Get get) throws IOException {<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>    Scan scan = new Scan(get);<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>        // readpoint 0.<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>        0);<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span><a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>    scanner.next(result);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    if (!result.isEmpty()) {<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>      // verify that we are on the row we want:<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>      Cell kv = result.get(0);<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>        result.clear();<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>      }<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    }<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>    scanner.close();<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    return result;<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  }<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span><a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  /**<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>   * Create region split keys between startkey and endKey<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>   *<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>   * @param startKey<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>   * @param endKey<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>   * @return resulting split keys<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    assertTrue(numRegions&gt;3);<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>    return result;<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>  }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>  /**<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>   * Do a small get/scan against one store. This is required because store<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>   */<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>                                                byte [] row,<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>                                                ) throws IOException {<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    Get get = new Get(row);<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span><a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>    return getFromStoreFile(store,get);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>  }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span><a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>    final int eLen = expected.size();<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>    final int aLen = actual.size();<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span><a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>    int i;<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>    for (i = 0; i &lt; minLen<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>        ++i) {}<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span><a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>    if (additionalMsg == null) {<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>      additionalMsg = "";<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>    }<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>    if (!additionalMsg.isEmpty()) {<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>      additionalMsg = ". " + additionalMsg;<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>    }<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span><a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    if (eLen != aLen || i != minLen) {<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>      throw new AssertionError(<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    }<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>      return lst.get(i).toString();<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>    } else {<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return "&lt;out_of_range&gt;";<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span><a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>  public String getClusterKey() {<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span><a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>  /** Creates a random table with the given parameters */<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  public Table createRandomTable(TableName tableName,<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      final Collection&lt;String&gt; families,<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>      final int maxVersions,<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      final int numColsPerRow,<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span>      final int numFlushes,<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>      final int numRegions,<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>      final int numRowsPerFlush)<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>      throws IOException, InterruptedException {<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span><a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>        "\n");<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span><a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>    final int numCF = families.size();<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>    {<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>      int cfIndex = 0;<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      for (String cf : families) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>      }<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    }<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span><a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    final int actualStartKey = 0;<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>    final String keyFormat = "%08x";<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>        maxVersions,<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        numRegions);<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span><a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>    if (hbaseCluster != null) {<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    }<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span><a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span><a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span><a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>        Put put = new Put(row);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>        Delete del = new Delete(row);<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>          final long ts = rand.nextInt();<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>          if (rand.nextBoolean()) {<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>                ts + "_random_" + rand.nextLong());<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>            put.addColumn(cf, qual, ts, value);<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>            del.addColumn(cf, qual, ts);<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>          } else {<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>            del.addColumns(cf, qual, ts);<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>          }<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>        }<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span><a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>        if (!put.isEmpty()) {<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>          mutator.mutate(put);<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>        }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>        if (!del.isEmpty()) {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>          mutator.mutate(del);<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>        }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>      mutator.flush();<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>      if (hbaseCluster != null) {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>    }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>    mutator.close();<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span><a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>    return table;<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span><a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>  public static int randomFreePort() {<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  public static String randomMultiCastAddress() {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    return "226.1.1." + random.nextInt(254);<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>  }<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span><a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>  public static void waitForHostPort(String host, int port)<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      throws IOException {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>    final int maxTimeMs = 10000;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>    IOException savedException = null;<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      try {<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>        sock.close();<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        savedException = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>        break;<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>      } catch (UnknownHostException e) {<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span>      } catch (IOException e) {<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>        savedException = e;<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>      }<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>    }<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span><a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>    if (savedException != null) {<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>      throw savedException;<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>    }<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>  }<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span><a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>  /**<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   * logs a warning and continues.<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * @return the number of regions the table was split into<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   */<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      Durability.USE_DEFAULT);<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>  }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>  /**<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>   * logs a warning and continues.<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>   * @return the number of regions the table was split into<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>   */<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>    builder.setDurability(durability);<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    builder.setRegionReplication(regionReplication);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>    cfBuilder.setCompressionType(compression);<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>      numRegionsPerServer);<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>  }<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span><a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>  /**<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>   * logs a warning and continues.<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>   * @return the number of regions the table was split into<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>   */<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>    builder.setDurability(durability);<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>    builder.setRegionReplication(regionReplication);<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>      cfBuilder.setCompressionType(compression);<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>      hcds[i] = cfBuilder.build();<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>    }<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>  }<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span><a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>  /**<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>   * logs a warning and continues.<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>   * @return the number of regions the table was split into<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>   */<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>  }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  /**<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>   * logs a warning and continues.<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>   * @return the number of regions the table was split into<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>   */<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span>        numRegionsPerServer);<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>  }<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span><a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>  /**<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span>   * logs a warning and continues.<a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>   * @return the number of regions the table was split into<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>   */<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span>      int numRegionsPerServer) throws IOException {<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>  }<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span><a name="line.3910"></a>
-<span class="sourceLineNo">3911</span>  /**<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>   * logs a warning and continues.<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>   * @return the number of regions the table was split into<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>   */<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>        builder.setColumnFamily(cd);<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>      }<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>    }<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>    td = builder.build();<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span>    int totalNumberOfRegions = 0;<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span><a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    try {<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span>      // create a table a pre-splits regions.<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>      // The number of splits is set as:<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>      //    region servers * regions per region server).<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>      if (numberOfServers == 0) {<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span>        throw new IllegalStateException("No live regionservers");<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>      }<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span><a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span><a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>      byte[][] splits = splitter.split(<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>          totalNumberOfRegions);<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span><a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>      admin.createTable(td, splits);<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>    } catch (MasterNotRunningException e) {<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>      LOG.error("Master not running", e);<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>      throw new IOException(e);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>    } catch (TableExistsException e) {<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>          " already exists, continuing");<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>    } finally {<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>      admin.close();<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span>      unmanagedConnection.close();<a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>    }<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>    return totalNumberOfRegions;<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>  }<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span><a name="line.3960"></a>
-<span class="sourceLineNo">3961</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span>    }<a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>  }<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span><a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>  /**<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>   *  Due to async racing issue, a region may not be in<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>   *  the online region list of a region server yet, after<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span>   *  the assignment znode is deleted and the new assignment<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>   *  is recorded in master.<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>   */<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>  public void assertRegionOnServer(<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span>      final RegionInfo hri, final ServerName server,<a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>    while (true) {<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>      if (now &gt; timeoutTime) break;<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span>      Thread.sleep(10);<a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>    }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>      + " on server " + server);<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>  }<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span><a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>  /**<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>   * Check to make sure the region is open on the specified<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span>   * region server, but not on any other one.<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>   */<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>  public void assertRegionOnlyOnServer(<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span>      final RegionInfo hri, final ServerName server,<a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>    while (true) {<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3998"></a>
-<span class="sourceLineNo">3999</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span>          if (server.equals(rs.getServerName())) {<a name="line.4003"></a>
-<span class="sourceLineNo">4004</span>            continue;<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>          }<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>          for (HRegion r: hrs) {<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span>            assertTrue("Region should not be double assigned",<a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>          }<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>        }<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>        return; // good, we are happy<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span>      }<a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>      if (now &gt; timeoutTime) break;<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>      Thread.sleep(10);<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>    }<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>      + " on server " + server);<a name="line.4019"></a>
-<span class="sourceLineNo">4020</span>  }<a name="line.4020"></a>
-<span class="sourceLineNo">4021</span><a name="line.4021"></a>
-<span class="sourceLineNo">4022</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4022"></a>
-<span class="sourceLineNo">4023</span>    TableDescriptor td =<a name="line.4023"></a>
-<span class="sourceLineNo">4024</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4024"></a>
-<span class="sourceLineNo">4025</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4025"></a>
-<span class="sourceLineNo">4026</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4026"></a>
-<span class="sourceLineNo">4027</span>  }<a name="line.4027"></a>
-<span class="sourceLineNo">4028</span><a name="line.4028"></a>
-<span class="sourceLineNo">4029</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4029"></a>
-<span class="sourceLineNo">4030</span>      BlockCache blockCache) throws IOException {<a name="line.4030"></a>
-<span class="sourceLineNo">4031</span>    TableDescriptor td =<a name="line.4031"></a>
-<span class="sourceLineNo">4032</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4032"></a>
-<span class="sourceLineNo">4033</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4033"></a>
-<span class="sourceLineNo">4034</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4034"></a>
-<span class="sourceLineNo">4035</span>  }<a name="line.4035"></a>
-<span class="sourceLineNo">4036</span><a name="line.4036"></a>
-<span class="sourceLineNo">4037</span>  public void setFileSystemURI(String fsURI) {<a name="line.4037"></a>
-<span class="sourceLineNo">4038</span>    FS_URI = fsURI;<a name="line.4038"></a>
-<span class="sourceLineNo">4039</span>  }<a name="line.4039"></a>
-<span class="sourceLineNo">4040</span><a name="line.4040"></a>
-<span class="sourceLineNo">4041</span>  /**<a name="line.4041"></a>
-<span class="sourceLineNo">4042</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4042"></a>
-<span class="sourceLineNo">4043</span>   */<a name="line.4043"></a>
-<span class="sourceLineNo">4044</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4044"></a>
-<span class="sourceLineNo">4045</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4045"></a>
-<span class="sourceLineNo">4046</span>      @Override<a name="line.4046"></a>
-<span class="sourceLineNo">4047</span>      public String explainFailure() throws IOException {<a name="line.4047"></a>
-<span class="sourceLineNo">4048</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4048"></a>
-<span class="sourceLineNo">4049</span>            .getAssignmentManager().getRegionStates();<a name="line.4049"></a>
-<span class="sourceLineNo">4050</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4050"></a>
-<span class="sourceLineNo">4051</span>      }<a name="line.4051"></a>
-<span class="sourceLineNo">4052</span><a name="line.4052"></a>
-<span class="sourceLineNo">4053</span>      @Override<a name="line.4053"></a>
-<span class="sourceLineNo">4054</span>      public boolean evaluate() throws IOException {<a name="line.4054"></a>
-<span class="sourceLineNo">4055</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4055"></a>
-<span class="sourceLineNo">4056</span>        if (master == null) return false;<a name="line.4056"></a>
-<span class="sourceLineNo">4057</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4057"></a>
-<span class="sourceLineNo">4058</span>        if (am == null) return false;<a name="line.4058"></a>
-<span class="sourceLineNo">4059</span>        return !am.hasRegionsInTransition();<a name="line.4059"></a>
-<span class="sourceLineNo">4060</span>      }<a name="line.4060"></a>
-<span class="sourceLineNo">4061</span>    };<a name="line.4061"></a>
-<span class="sourceLineNo">4062</span>  }<a name="line.4062"></a>
-<span class="sourceLineNo">4063</span><a name="line.4063"></a>
-<span class="sourceLineNo">4064</span>  /**<a name="line.4064"></a>
-<span class="sourceLineNo">4065</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4065"></a>
-<span class="sourceLineNo">4066</span>   */<a name="line.4066"></a>
-<span class="sourceLineNo">4067</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4067"></a>
-<span class="sourceLineNo">4068</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4068"></a>
-<span class="sourceLineNo">4069</span>      @Override<a name="line.4069"></a>
-<span class="sourceLineNo">4070</span>      public String explainFailure() throws IOException {<a name="line.4070"></a>
-<span class="sourceLineNo">4071</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4071"></a>
-<span class="sourceLineNo">4072</span>      }<a name="line.4072"></a>
-<span class="sourceLineNo">4073</span><a name="line.4073"></a>
-<span class="sourceLineNo">4074</span>      @Override<a name="line.4074"></a>
-<span class="sourceLineNo">4075</span>      public boolean evaluate() throws IOException {<a name="line.4075"></a>
-<span class="sourceLineNo">4076</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4076"></a>
-<span class="sourceLineNo">4077</span>      }<a name="line.4077"></a>
-<span class="sourceLineNo">4078</span>    };<a name="line.4078"></a>
-<span class="sourceLineNo">4079</span>  }<a name="line.4079"></a>
-<span class="sourceLineNo">4080</span><a name="line.4080"></a>
-<span class="sourceLineNo">4081</span>  /**<a name="line.4081"></a>
-<span class="sourceLineNo">4082</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4082"></a>
-<span class="sourceLineNo">4083</span>   */<a name="line.4083"></a>
-<span class="sourceLineNo">4084</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4084"></a>
-<span class="sourceLineNo">4085</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4085"></a>
-<span class="sourceLineNo">4086</span>      @Override<a name="line.4086"></a>
-<span class="sourceLineNo">4087</span>      public String explainFailure() throws IOException {<a name="line.4087"></a>
-<span class="sourceLineNo">4088</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4088"></a>
-<span class="sourceLineNo">4089</span>      }<a name="line.4089"></a>
-<span class="sourceLineNo">4090</span><a name="line.4090"></a>
-<span class="sourceLineNo">4091</span>      @Override<a name="line.4091"></a>
-<span class="sourceLineNo">4092</span>      public boolean evaluate() throws IOException {<a name="line.4092"></a>
-<span class="sourceLineNo">4093</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4093"></a>
-<span class="sourceLineNo">4094</span>      }<a name="line.4094"></a>
-<span class="sourceLineNo">4095</span>    };<a name="line.4095"></a>
-<span class="sourceLineNo">4096</span>  }<a name="line.4096"></a>
-<span class="sourceLineNo">4097</span><a name="line.4097"></a>
-<span class="sourceLineNo">4098</span>  /**<a name="line.4098"></a>
-<span class="sourceLineNo">4099</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4099"></a>
-<span class="sourceLineNo">4100</span>   */<a name="line.4100"></a>
-<span class="sourceLineNo">4101</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4101"></a>
-<span class="sourceLineNo">4102</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4102"></a>
-<span class="sourceLineNo">4103</span>      @Override<a name="line.4103"></a>
-<span class="sourceLineNo">4104</span>      public String explainFailure() throws IOException {<a name="line.4104"></a>
-<span class="sourceLineNo">4105</span>        return explainTableAvailability(tableName);<a name="line.4105"></a>
-<span class="sourceLineNo">4106</span>      }<a name="line.4106"></a>
-<span class="sourceLineNo">4107</span><a name="line.4107"></a>
-<span class="sourceLineNo">4108</span>      @Override<a name="line.4108"></a>
-<span class="sourceLineNo">4109</span>      public boolean evaluate() throws IOException {<a name="line.4109"></a>
-<span class="sourceLineNo">4110</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4110"></a>
-<span class="sourceLineNo">4111</span>        if (tableAvailable) {<a name="line.4111"></a>
-<span class="sourceLineNo">4112</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4112"></a>
-<span class="sourceLineNo">4113</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4113"></a>
-<span class="sourceLineNo">4114</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4114"></a>
-<span class="sourceLineNo">4115</span>                .getAllRegionLocations()) {<a name="line.4115"></a>
-<span class="sourceLineNo">4116</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4116"></a>
-<span class="sourceLineNo">4117</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4117"></a>
-<span class="sourceLineNo">4118</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4118"></a>
-<span class="sourceLineNo">4119</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4119"></a>
-<span class="sourceLineNo">4120</span>                scan.addFamily(family);<a name="line.4120"></a>
-<span class="sourceLineNo">4121</span>              }<a name="line.4121"></a>
-<span class="sourceLineNo">4122</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4122"></a>
-<span class="sourceLineNo">4123</span>                scanner.next();<a name="line.4123"></a>
-<span class="sourceLineNo">4124</span>              }<a name="line.4124"></a>
-<span class="sourceLineNo">4125</span>            }<a name="line.4125"></a>
-<span class="sourceLineNo">4126</span>          }<a name="line.4126"></a>
-<span class="sourceLineNo">4127</span>        }<a name="line.4127"></a>
-<span class="sourceLineNo">4128</span>        return tableAvailable;<a name="line.4128"></a>
-<span class="sourceLineNo">4129</span>      }<a name="line.4129"></a>
-<span class="sourceLineNo">4130</span>    };<a name="line.4130"></a>
-<span class="sourceLineNo">4131</span>  }<a name="line.4131"></a>
-<span class="sourceLineNo">4132</span><a name="line.4132"></a>
-<span class="sourceLineNo">4133</span>  /**<a name="line.4133"></a>
-<span class="sourceLineNo">4134</span>   * Wait until no regions in transition.<a name="line.4134"></a>
-<span class="sourceLineNo">4135</span>   * @param timeout How long to wait.<a name="line.4135"></a>
-<span class="sourceLineNo">4136</span>   * @throws IOException<a name="line.4136"></a>
-<span class="sourceLineNo">4137</span>   */<a name="line.4137"></a>
-<span class="sourceLineNo">4138</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4138"></a>
-<span class="sourceLineNo">4139</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4139"></a>
-<span class="sourceLineNo">4140</span>  }<a name="line.4140"></a>
-<span class="sourceLineNo">4141</span><a name="line.4141"></a>
-<span class="sourceLineNo">4142</span>  /**<a name="line.4142"></a>
-<span class="sourceLineNo">4143</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4143"></a>
-<span class="sourceLineNo">4144</span>   * @throws IOException<a name="line.4144"></a>
-<span class="sourceLineNo">4145</span>   */<a name="line.4145"></a>
-<span class="sourceLineNo">4146</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4146"></a>
-<span class="sourceLineNo">4147</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4147"></a>
-<span class="sourceLineNo">4148</span>  }<a name="line.4148"></a>
-<span class="sourceLineNo">4149</span><a name="line.4149"></a>
-<span class="sourceLineNo">4150</span>  /**<a name="line.4150"></a>
-<span class="sourceLineNo">4151</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4151"></a>
-<span class="sourceLineNo">4152</span>   * @param timeoutMillis<a name="line.4152"></a>
-<span class="sourceLineNo">4153</span>   * @param labels<a name="line.4153"></a>
-<span class="sourceLineNo">4154</span>   */<a name="line.4154"></a>
-<span class="sourceLineNo">4155</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4155"></a>
-<span class="sourceLineNo">4156</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4156"></a>
-<span class="sourceLineNo">4157</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4157"></a>
-<span class="sourceLineNo">4158</span><a name="line.4158"></a>
-<span class="sourceLineNo">4159</span>      @Override<a name="line.4159"></a>
-<span class="sourceLineNo">4160</span>      public boolean evaluate() {<a name="line.4160"></a>
-<span class="sourceLineNo">4161</span>        for (String label : labels) {<a name="line.4161"></a>
-<span class="sourceLineNo">4162</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4162"></a>
-<span class="sourceLineNo">4163</span>            return false;<a name="line.4163"></a>
-<span class="sourceLineNo">4164</span>          }<a name="line.4164"></a>
-<span class="sourceLineNo">4165</span>        }<a name="line.4165"></a>
-<span class="sourceLineNo">4166</span>        return true;<a name="line.4166"></a>
-<span class="sourceLineNo">4167</span>      }<a name="line.4167"></a>
-<span class="sourceLineNo">4168</span><a name="line.4168"></a>
-<span class="sourceLineNo">4169</span>      @Override<a name="line.4169"></a>
-<span class="sourceLineNo">4170</span>      public String explainFailure() {<a name="line.4170"></a>
-<span class="sourceLineNo">4171</span>        for (String label : labels) {<a name="line.4171"></a>
-<span class="sourceLineNo">4172</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4172"></a>
-<span class="sourceLineNo">4173</span>            return label + " is not available yet";<a name="line.4173"></a>
-<span class="sourceLineNo">4174</span>          }<a name="line.4174"></a>
-<span class="sourceLineNo">4175</span>        }<a name="line.4175"></a>
-<span class="sourceLineNo">4176</span>        return "";<a name="line.4176"></a>
-<span class="sourceLineNo">4177</span>      }<a name="line.4177"></a>
-<span class="sourceLineNo">4178</span>    });<a name="line.4178"></a>
-<span class="sourceLineNo">4179</span>  }<a name="line.4179"></a>
-<span class="sourceLineNo">4180</span><a name="line.4180"></a>
-<span class="sourceLineNo">4181</span>  /**<a name="line.4181"></a>
-<span class="sourceLineNo">4182</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4182"></a>
-<span class="sourceLineNo">4183</span>   * encoding, bloom codecs available.<a name="line.4183"></a>
-<span class="sourceLineNo">4184</span>   * @return the list of column descriptors<a name="line.4184"></a>
-<span class="sourceLineNo">4185</span>   */<a name="line.4185"></a>
-<span class="sourceLineNo">4186</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4186"></a>
-<span class="sourceLineNo">4187</span>    return generateColumnDescriptors("");<a name="line.4187"></a>
-<span class="sourceLineNo">4188</span>  }<a name="line.4188"></a>
-<span class="sourceLineNo">4189</span><a name="line.4189"></a>
-<span class="sourceLineNo">4190</span>  /**<a name="line.4190"></a>
-<span class="sourceLineNo">4191</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4191"></a>
-<span class="sourceLineNo">4192</span>   * encoding, bloom codecs available.<a name="line.4192"></a>
-<span class="sourceLineNo">4193</span>   * @param prefix family names prefix<a name="line.4193"></a>
-<span class="sourceLineNo">4194</span>   * @return the list of column descriptors<a name="line.4194"></a>
-<span class="sourceLineNo">4195</span>   */<a name="line.4195"></a>
-<span class="sourceLineNo">4196</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4196"></a>
-<span class="sourceLineNo">4197</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4197"></a>
-<span class="sourceLineNo">4198</span>    long familyId = 0;<a name="line.4198"></a>
-<span class="sourceLineNo">4199</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4199"></a>
-<span class="sourceLineNo">4200</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4200"></a>
-<span class="sourceLineNo">4201</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4201"></a>
-<span class="sourceLineNo">4202</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4202"></a>
-<span class="sourceLineNo">4203</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4203"></a>
-<span class="sourceLineNo">4204</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4204"></a>
-<span class="sourceLineNo">4205</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4205"></a>
-<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4206"></a>
-<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4207"></a>
-<span class="sourceLineNo">4208</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4208"></a>
-<span class="sourceLineNo">4209</span>          familyId++;<a name="line.4209"></a>
-<span class="sourceLineNo">4210</span>        }<a name="line.4210"></a>
-<span class="sourceLineNo">4211</span>      }<a name="line.4211"></a>
-<span class="sourceLineNo">4212</span>    }<a name="line.4212"></a>
-<span class="sourceLineNo">4213</span>    return columnFamilyDescriptors;<a name="line.4213"></a>
-<span class="sourceLineNo">4214</span>  }<a name="line.4214"></a>
-<span class="sourceLineNo">4215</span><a name="line.4215"></a>
-<span class="sourceLineNo">4216</span>  /**<a name="line.4216"></a>
-<span class="sourceLineNo">4217</span>   * Get supported compression algorithms.<a name="line.4217"></a>
-<span class="sourceLineNo">4218</span>   * @return supported compression algorithms.<a name="line.4218"></a>
-<span class="sourceLineNo">4219</span>   */<a name="line.4219"></a>
-<span class="sourceLineNo">4220</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4220"></a>
-<span class="sourceLineNo">4221</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4221"></a>
-<span class="sourceLineNo">4222</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4222"></a>
-<span class="sourceLineNo">4223</span>    for (String algoName : allAlgos) {<a name="line.4223"></a>
-<span class="sourceLineNo">4224</span>      try {<a name="line.4224"></a>
-<span class="sourceLineNo">4225</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4225"></a>
-<span class="sourceLineNo">4226</span>        algo.getCompressor();<a name="line.4226"></a>
-<span class="sourceLineNo">4227</span>        supportedAlgos.add(algo);<a name="line.4227"></a>
-<span class="sourceLineNo">4228</span>      } catch (Throwable t) {<a name="line.4228"></a>
-<span class="sourceLineNo">4229</span>        // this algo is not available<a name="line.4229"></a>
-<span class="sourceLineNo">4230</span>      }<a name="line.4230"></a>
-<span class="sourceLineNo">4231</span>    }<a name="line.4231"></a>
-<span class="sourceLineNo">4232</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4232"></a>
-<span class="sourceLineNo">4233</span>  }<a name="line.4233"></a>
-<span class="sourceLineNo">4234</span><a name="line.4234"></a>
-<span class="sourceLineNo">4235</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4235"></a>
-<span class="sourceLineNo">4236</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4236"></a>
-<span class="sourceLineNo">4237</span>    scan.setSmall(true);<a name="line.4237"></a>
-<span class="sourceLineNo">4238</span>    scan.setCaching(1);<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>    scan.setReversed(true);<a name="line.4239"></a>
-<span class="sourceLineNo">4240</span>    scan.addFamily(family);<a name="line.4240"></a>
-<span class="sourceLineNo">4241</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4241"></a>
-<span class="sourceLineNo">4242</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4242"></a>
-<span class="sourceLineNo">4243</span>      scanner.next(cells);<a name="line.4243"></a>
-<span class="sourceLineNo">4244</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4244"></a>
-<span class="sourceLineNo">4245</span>        return null;<a name="line.4245"></a>
-<span class="sourceLineNo">4246</span>      }<a name="line.4246"></a>
-<span class="sourceLineNo">4247</span>      return Result.create(cells);<a name="line.4247"></a>
-<span class="sourceLineNo">4248</span>    }<a name="line.4248"></a>
-<span class="sourceLineNo">4249</span>  }<a name="line.4249"></a>
-<span class="sourceLineNo">4250</span><a name="line.4250"></a>
-<span class="sourceLineNo">4251</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4251"></a>
-<span class="sourceLineNo">4252</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4252"></a>
-<span class="sourceLineNo">4253</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4253"></a>
-<span class="sourceLineNo">4254</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4254"></a>
-<span class="sourceLineNo">4255</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4255"></a>
-<span class="sourceLineNo">4256</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4256"></a>
-<span class="sourceLineNo">4257</span>  }<a name="line.4257"></a>
-<span class="sourceLineNo">4258</span><a name="line.4258"></a>
-<span class="sourceLineNo">4259</span>  /**<a name="line.4259"></a>
-<span class="sourceLineNo">4260</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4260"></a>
-<span class="sourceLineNo">4261</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4261"></a>
-<span class="sourceLineNo">4262</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4262"></a>
-<span class="sourceLineNo">4263</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4263"></a>
-<span class="sourceLineNo">4264</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4264"></a>
-<span class="sourceLineNo">4265</span>   * less baggage. It came in in HBASE-5291.<a name="line.4265"></a>
-<span class="sourceLineNo">4266</span>   */<a name="line.4266"></a>
-<span class="sourceLineNo">4267</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4267"></a>
-<span class="sourceLineNo">4268</span>    Properties conf = MiniKdc.createConf();<a name="line.4268"></a>
-<span class="sourceLineNo">4269</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4269"></a>
-<span class="sourceLineNo">4270</span>    MiniKdc kdc = null;<a name="line.4270"></a>
-<span class="sourceLineNo">4271</span>    File dir = null;<a name="line.4271"></a>
-<span class="sourceLineNo">4272</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4272"></a>
-<span class="sourceLineNo">4273</span>    // another service captures the port in between which'll result in BindException.<a name="line.4273"></a>
-<span class="sourceLineNo">4274</span>    boolean bindException;<a name="line.4274"></a>
-<span class="sourceLineNo">4275</span>    int numTries = 0;<a name="line.4275"></a>
-<span class="sourceLineNo">4276</span>    do {<a name="line.4276"></a>
-<span class="sourceLineNo">4277</span>      try {<a name="line.4277"></a>
-<span class="sourceLineNo">4278</span>        bindException = false;<a name="line.4278"></a>
-<span class="sourceLineNo">4279</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4279"></a>
-<span class="sourceLineNo">4280</span>        kdc = new MiniKdc(conf, dir);<a name="line.4280"></a>
-<span class="sourceLineNo">4281</span>        kdc.start();<a name="line.4281"></a>
-<span class="sourceLineNo">4282</span>      } catch (BindException e) {<a name="line.4282"></a>
-<span class="sourceLineNo">4283</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4283"></a>
-<span class="sourceLineNo">4284</span>        numTries++;<a name="line.4284"></a>
-<span class="sourceLineNo">4285</span>        if (numTries == 3) {<a name="line.4285"></a>
-<span class="sourceLineNo">4286</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4286"></a>
-<span class="sourceLineNo">4287</span>          throw e;<a name="line.4287"></a>
-<span class="sourceLineNo">4288</span>        }<a name="line.4288"></a>
-<span class="sourceLineNo">4289</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4289"></a>
-<span class="sourceLineNo">4290</span>        bindException = true;<a name="line.4290"></a>
-<span class="sourceLineNo">4291</span>      }<a name="line.4291"></a>
-<span class="sourceLineNo">4292</span>    } while (bindException);<a name="line.4292"></a>
-<span class="sourceLineNo">4293</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>    return kdc;<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>  }<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span><a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>    int numHFiles = 0;<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4299"></a>
-<span class="sourceLineNo">4300</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4300"></a>
-<span class="sourceLineNo">4301</span>                                    family);<a name="line.4301"></a>
-<span class="sourceLineNo">4302</span>    }<a name="line.4302"></a>
-<span class="sourceLineNo">4303</span>    return numHFiles;<a name="line.4303"></a>
-<span class="sourceLineNo">4304</span>  }<a name="line.4304"></a>
-<span class="sourceLineNo">4305</span><a name="line.4305"></a>
-<span class="sourceLineNo">4306</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4306"></a>
-<span class="sourceLineNo">4307</span>                               final byte[] family) {<a name="line.4307"></a>
-<span class="sourceLineNo">4308</span>    int numHFiles = 0;<a name="line.4308"></a>
-<span class="sourceLineNo">4309</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4309"></a>
-<span class="sourceLineNo">4310</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4310"></a>
-<span class="sourceLineNo">4311</span>    }<a name="line.4311"></a>
-<span class="sourceLineNo">4312</span>    return numHFiles;<a name="line.4312"></a>
-<span class="sourceLineNo">4313</span>  }<a name="line.4313"></a>
-<span class="sourceLineNo">4314</span><a name="line.4314"></a>
-<span class="sourceLineNo">4315</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4315"></a>
-<span class="sourceLineNo">4316</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4316"></a>
-<span class="sourceLineNo">4317</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4317"></a>
-<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4318"></a>
-<span class="sourceLineNo">4319</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4319"></a>
-<span class="sourceLineNo">4320</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4320"></a>
-<span class="sourceLineNo">4321</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4321"></a>
-<span class="sourceLineNo">4322</span>      assertEquals(0,<a name="line.4322"></a>
-<span class="sourceLineNo">4323</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4323"></a>
-<span class="sourceLineNo">4324</span>    }<a name="line.4324"></a>
-<span class="sourceLineNo">4325</span>  }<a name="line.4325"></a>
-<span class="sourceLineNo">4326</span><a name="line.4326"></a>
-<span class="sourceLineNo">4327</span>  /**<a name="line.4327"></a>
-<span class="sourceLineNo">4328</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4328"></a>
-<span class="sourceLineNo">4329</span>   * invocations.<a name="line.4329"></a>
-<span class="sourceLineNo">4330</span>   */<a name="line.4330"></a>
-<span class="sourceLineNo">4331</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4331"></a>
-<span class="sourceLineNo">4332</span>    throws InterruptedException {<a name="line.4332"></a>
-<span class="sourceLineNo">4333</span>    try {<a name="line.4333"></a>
-<span class="sourceLineNo">4334</span>      while (!condition.getAsBoolean()) {<a name="line.4334"></a>
-<span class="sourceLineNo">4335</span>        Thread.sleep(sleepMillis);<a name="line.4335"></a>
-<span class="sourceLineNo">4336</span>      }<a name="line.4336"></a>
-<span class="sourceLineNo">4337</span>    } catch (RuntimeException e) {<a name="line.4337"></a>
-<span class="sourceLineNo">4338</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4338"></a>
-<span class="sourceLineNo">4339</span>        throw (AssertionError) e.getCause();<a name="line.4339"></a>
-<span class="sourceLineNo">4340</span>      }<a name="line.4340"></a>
-<span class="sourceLineNo">4341</span>      throw e;<a name="line.4341"></a>
-<span class="sourceLineNo">4342</span>    }<a name="line.4342"></a>
-<span class="sourceLineNo">4343</span>  }<a name="line.4343"></a>
-<span class="sourceLineNo">4344</span>}<a name="line.4344"></a>
+<span class="sourceLineNo">3372</span><a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>  /**<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * user into the clone.  Use it getting new instances of FileSystem.  Only<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   * works for DistributedFileSystem w/o Kerberos.<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param c Initial configuration<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   * @return A new configuration instance with a different user set into it.<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>   * @throws IOException<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>   */<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>  public static User getDifferentUser(final Configuration c,<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    final String differentiatingSuffix)<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  throws IOException {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>    FileSystem currentfs = FileSystem.get(c);<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      return User.getCurrent();<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    }<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    // Else distributed filesystem.  Make a new instance per daemon.  Below<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    // code is taken from the AppendTestUtil over in hdfs.<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>    String username = User.getCurrent().getName() +<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>      differentiatingSuffix;<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    User user = User.createUserForTesting(c, username,<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>        new String[]{"supergroup"});<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>    return user;<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>  }<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span><a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      throws IOException {<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      try {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        for (RegionInfo region :<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>            ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>          online.add(region.getRegionNameAsString());<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>        }<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>      } catch (RegionServerStoppedException e) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>        // That's fine.<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>      }<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>    for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>      try {<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>        for (RegionInfo region :<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>            ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>          online.add(region.getRegionNameAsString());<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>        }<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>      } catch (RegionServerStoppedException e) {<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>        // That's fine.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>      } catch (ServerNotRunningYetException e) {<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>        // That's fine.<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>      }<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    }<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>    return online;<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>  }<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span><a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>  /**<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>   * Set maxRecoveryErrorCount in DFSClient.  In 0.20 pre-append its hard-coded to 5 and<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>   * makes tests linger.  Here is the exception you'll see:<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>   * &lt;pre&gt;<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>   * &lt;/pre&gt;<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>   * @param stream A DFSClient.DFSOutputStream.<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>   * @param max<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>   * @throws NoSuchFieldException<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>   * @throws SecurityException<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @throws IllegalAccessException<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @throws IllegalArgumentException<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>      final int max) {<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>    try {<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>      Class&lt;?&gt; [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>      for (Class&lt;?&gt; clazz: clazzes) {<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>        String className = clazz.getSimpleName();<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        if (className.equals("DFSOutputStream")) {<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>          if (clazz.isInstance(stream)) {<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>            Field maxRecoveryErrorCountField =<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>              stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>            maxRecoveryErrorCountField.setAccessible(true);<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>            maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>            break;<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>          }<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      }<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>    } catch (Exception e) {<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>      LOG.info("Could not set max recovery field", e);<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>    }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span><a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>   * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>   * has completed assignment.<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>   * @return true if the region is assigned false otherwise.<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>   */<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>  public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>      throws IOException, InterruptedException {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    am.assign(regionInfo);<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>  }<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span><a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>  /**<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>   * Move region to destination server and wait till region is completely moved and online<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>   *<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>   * @param destRegion region to move<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * @param destServer destination server of the region<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * @throws InterruptedException<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   * @throws IOException<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   */<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>      throws InterruptedException, IOException {<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>    HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    // TODO: Here we start the move. The move can take a while.<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    while (true) {<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>      ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>          .getRegionServerOfRegion(destRegion);<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>      if (serverName != null &amp;&amp; serverName.equals(destServer)) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>        assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>        break;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>      }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      Thread.sleep(10);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    }<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>  }<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span><a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>  /**<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>   * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>   * This means all regions have been deployed,<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>   * server.<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>   * @param tableName the table name<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>   * @throws IOException<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>   */<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    waitUntilAllRegionsAssigned(tableName,<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span><a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>  /**<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * Waith until all system table's regions get assigned<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   * @throws IOException<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>   */<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>  public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>  }<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span><a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>  /**<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>   * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>   * info:server, or until timeout.  This means all regions have been deployed,<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>   * master has been informed and updated hbase:meta with the regions deployed<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>   * server.<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>   * @param tableName the table name<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>   * @param timeout timeout, in milliseconds<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>   * @throws IOException<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>   */<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>      throws IOException {<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>    if (!TableName.isMetaTableName(tableName)) {<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>            timeout + "ms");<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>          @Override<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>          public String explainFailure() throws IOException {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>            return explainTableAvailability(tableName);<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>          }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>          @Override<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>          public boolean evaluate() throws IOException {<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>            Scan scan = new Scan();<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>            scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>            boolean tableFound = false;<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>            try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>              for (Result r; (r = s.next()) != null;) {<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>                RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>                if (info != null &amp;&amp; info.getTable().equals(tableName)) {<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>                  // Get server hosting this region from catalog family. Return false if no server<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>                  // hosting this region, or if the server hosting this region was recently killed<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>                  // (for fault tolerance testing).<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>                  tableFound = true;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>                  byte[] server =<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>                  if (server == null) {<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>                    return false;<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>                  } else {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>                    byte[] startCode =<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>                        r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>                    ServerName serverName =<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>                        ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>                            Bytes.toLong(startCode));<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>                    if (!getHBaseClusterInterface().isDistributedCluster() &amp;&amp;<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>                        getHBaseCluster().isKilledRS(serverName)) {<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>                      return false;<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>                    }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>                  }<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>                    return false;<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>                  }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>                }<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>              }<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>            }<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>            if (!tableFound) {<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>              LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>            }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>            return tableFound;<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>          }<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>        });<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      }<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>    }<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>    // check from the master state if we are using a mini cluster<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>    if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      // returning -- sometimes this can lag.<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      HMaster master = getHBaseCluster().getMaster();<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>        @Override<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>        public String explainFailure() throws IOException {<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>          return explainTableAvailability(tableName);<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>        }<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span><a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>        @Override<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>        public boolean evaluate() throws IOException {<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>          return hris != null &amp;&amp; !hris.isEmpty();<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>        }<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>      });<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>    }<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>    LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>  }<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span><a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>  /**<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>   * Do a small get/scan against one store. This is required because store<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   */<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>                                                Get get) throws IOException {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>    Scan scan = new Scan(get);<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>        scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>        // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>        // readpoint 0.<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>        0);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span><a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    scanner.next(result);<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    if (!result.isEmpty()) {<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>      // verify that we are on the row we want:<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>      Cell kv = result.get(0);<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>      if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>        result.clear();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>      }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    }<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>    scanner.close();<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    return result;<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>  }<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span><a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  /**<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>   * Create region split keys between startkey and endKey<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>   *<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>   * @param startKey<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>   * @param endKey<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   * @return resulting split keys<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>   */<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    assertTrue(numRegions&gt;3);<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>    byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>    byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>    result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>    return result;<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  }<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span><a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>  /**<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>   * Do a small get/scan against one store. This is required because store<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>   * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>   */<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>  public static List&lt;Cell&gt; getFromStoreFile(HStore store,<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>                                                byte [] row,<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>                                                NavigableSet&lt;byte[]&gt; columns<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>                                                ) throws IOException {<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    Get get = new Get(row);<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>    s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span><a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    return getFromStoreFile(store,get);<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>  }<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span><a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>  public static void assertKVListsEqual(String additionalMsg,<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>      final List&lt;? extends Cell&gt; expected,<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>      final List&lt;? extends Cell&gt; actual) {<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>    final int eLen = expected.size();<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>    final int aLen = actual.size();<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>    final int minLen = Math.min(eLen, aLen);<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span><a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    int i;<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>    for (i = 0; i &lt; minLen<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        ++i) {}<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span><a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>    if (additionalMsg == null) {<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      additionalMsg = "";<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    if (!additionalMsg.isEmpty()) {<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>      additionalMsg = ". " + additionalMsg;<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>    }<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span><a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>    if (eLen != aLen || i != minLen) {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>      throw new AssertionError(<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>          "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>          safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>          safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    }<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>      return lst.get(i).toString();<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>    } else {<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>      return "&lt;out_of_range&gt;";<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>    }<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span><a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>  public String getClusterKey() {<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>        + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>        + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  }<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span><a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  /** Creates a random table with the given parameters */<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>  public Table createRandomTable(TableName tableName,<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      final Collection&lt;String&gt; families,<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      final int maxVersions,<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>      final int numColsPerRow,<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>      final int numFlushes,<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>      final int numRegions,<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>      final int numRowsPerFlush)<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>      throws IOException, InterruptedException {<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span><a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>        " regions, " + numFlushes + " storefiles per region, " +<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>        numRowsPerFlush + " rows per flush, maxVersions=" +  maxVersions +<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>        "\n");<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span><a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>    final int numCF = families.size();<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    final byte[][] cfBytes = new byte[numCF][];<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>    {<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>      int cfIndex = 0;<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>      for (String cf : families) {<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>        cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>      }<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span><a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>    final int actualStartKey = 0;<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>    final int actualEndKey = Integer.MAX_VALUE;<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>    final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>    final String keyFormat = "%08x";<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>    final Table table = createTable(tableName, cfBytes,<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>        maxVersions,<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>        Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>        Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        numRegions);<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span><a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    if (hbaseCluster != null) {<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>    }<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span><a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span><a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>        final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>            actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span><a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>        Put put = new Put(row);<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>        Delete del = new Delete(row);<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>          final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>          final long ts = rand.nextInt();<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>          final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>          if (rand.nextBoolean()) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>            final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>                "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>                ts + "_random_" + rand.nextLong());<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>            put.addColumn(cf, qual, ts, value);<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>          } else if (rand.nextDouble() &lt; 0.8) {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>            del.addColumn(cf, qual, ts);<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          } else {<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>            del.addColumns(cf, qual, ts);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>          }<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>        }<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span><a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (!put.isEmpty()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          mutator.mutate(put);<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>        }<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span><a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        if (!del.isEmpty()) {<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>          mutator.mutate(del);<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>        }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      }<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      mutator.flush();<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      if (hbaseCluster != null) {<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>        getMiniHBaseCluster().flushcache(table.getName());<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      }<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>    }<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    mutator.close();<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span><a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>    return table;<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>  }<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span><a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>  public static int randomFreePort() {<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>    return HBaseCommonTestingUtility.randomFreePort();<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>  }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  public static String randomMultiCastAddress() {<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>    return "226.1.1." + random.nextInt(254);<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>  }<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span><a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  public static void waitForHostPort(String host, int port)<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>      throws IOException {<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>    final int maxTimeMs = 10000;<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>    IOException savedException = null;<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>    LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>      try {<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>        Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>        sock.close();<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>        savedException = null;<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>        LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>        break;<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>      } catch (UnknownHostException e) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>        throw new IOException("Failed to look up " + host, e);<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      } catch (IOException e) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        savedException = e;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span><a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>    if (savedException != null) {<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>      throw savedException;<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>    }<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>  }<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span><a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>  /**<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>   * logs a warning and continues.<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>   * @return the number of regions the table was split into<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>   */<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>      TableName tableName, byte[] columnFamily, Algorithm compression,<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>      DataBlockEncoding dataBlockEncoding) throws IOException {<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>    return createPreSplitLoadTestTable(conf, tableName,<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>      columnFamily, compression, dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1,<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      Durability.USE_DEFAULT);<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>  }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>  /**<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * logs a warning and continues.<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * @return the number of regions the table was split into<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   */<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>    builder.setDurability(durability);<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>    builder.setRegionReplication(regionReplication);<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    cfBuilder.setCompressionType(compression);<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>      numRegionsPerServer);<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>  }<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span><a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>  /**<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>   * logs a warning and continues.<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>   * @return the number of regions the table was split into<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>   */<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>    builder.setDurability(durability);<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>    builder.setRegionReplication(regionReplication);<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>    for (int i = 0; i &lt; columnFamilies.length; i++) {<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>      cfBuilder.setDataBlockEncoding(dataBlockEncoding);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>      cfBuilder.setCompressionType(compression);<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span>      hcds[i] = cfBuilder.build();<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>    }<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   * logs a warning and continues.<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>   * @return the number of regions the table was split into<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span>   */<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd) throws IOException {<a name="line.3885"></a>
+<span class="sourceLineNo">3886</span>    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span>  }<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span><a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>  /**<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>   * logs a warning and continues.<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>   * @return the number of regions the table was split into<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>   */<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>      TableDescriptor desc, ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span>    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] {hcd},<a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>        numRegionsPerServer);<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  }<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span><a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  /**<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>   * logs a warning and continues.<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>   * @return the number of regions the table was split into<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>   */<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>      TableDescriptor desc, ColumnFamilyDescriptor[] hcds,<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span>      int numRegionsPerServer) throws IOException {<a name="line.3907"></a>
+<span class="sourceLineNo">3908</span>    return createPreSplitLoadTestTable(conf, desc, hcds,<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span>      new RegionSplitter.HexStringSplit(), numRegionsPerServer);<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span>  }<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span><a name="line.3911"></a>
+<span class="sourceLineNo">3912</span>  /**<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span>   * Creates a pre-split table for load testing. If the table already exists,<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>   * logs a warning and continues.<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>   * @return the number of regions the table was split into<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span>   */<a name="line.3916"></a>
+<span class="sourceLineNo">3917</span>  public static int createPreSplitLoadTestTable(Configuration conf,<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span>      TableDescriptor td, ColumnFamilyDescriptor[] cds,<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span>      SplitAlgorithm splitter, int numRegionsPerServer) throws IOException {<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);<a name="line.3920"></a>
+<span class="sourceLineNo">3921</span>    for (ColumnFamilyDescriptor cd : cds) {<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span>      if (!td.hasColumnFamily(cd.getName())) {<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span>        builder.setColumnFamily(cd);<a name="line.3923"></a>
+<span class="sourceLineNo">3924</span>      }<a name="line.3924"></a>
+<span class="sourceLineNo">3925</span>    }<a name="line.3925"></a>
+<span class="sourceLineNo">3926</span>    td = builder.build();<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span>    int totalNumberOfRegions = 0;<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span>    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>    Admin admin = unmanagedConnection.getAdmin();<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span><a name="line.3930"></a>
+<span class="sourceLineNo">3931</span>    try {<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span>      // create a table a pre-splits regions.<a name="line.3932"></a>
+<span class="sourceLineNo">3933</span>      // The number of splits is set as:<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span>      //    region servers * regions per region server).<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span>      int numberOfServers = admin.getRegionServers().size();<a name="line.3935"></a>
+<span class="sourceLineNo">3936</span>      if (numberOfServers == 0) {<a name="line.3936"></a>
+<span class="sourceLineNo">3937</span>        throw new IllegalStateException("No live regionservers");<a name="line.3937"></a>
+<span class="sourceLineNo">3938</span>      }<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span><a name="line.3939"></a>
+<span class="sourceLineNo">3940</span>      totalNumberOfRegions = numberOfServers * numRegionsPerServer;<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>      LOG.info("Number of live regionservers: " + numberOfServers + ", " +<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span>          "pre-splitting table into " + totalNumberOfRegions + " regions " +<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span>          "(regions per server: " + numRegionsPerServer + ")");<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span><a name="line.3944"></a>
+<span class="sourceLineNo">3945</span>      byte[][] splits = splitter.split(<a name="line.3945"></a>
+<span class="sourceLineNo">3946</span>          totalNumberOfRegions);<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span><a name="line.3947"></a>
+<span class="sourceLineNo">3948</span>      admin.createTable(td, splits);<a name="line.3948"></a>
+<span class="sourceLineNo">3949</span>    } catch (MasterNotRunningException e) {<a name="line.3949"></a>
+<span class="sourceLineNo">3950</span>      LOG.error("Master not running", e);<a name="line.3950"></a>
+<span class="sourceLineNo">3951</span>      throw new IOException(e);<a name="line.3951"></a>
+<span class="sourceLineNo">3952</span>    } catch (TableExistsException e) {<a name="line.3952"></a>
+<span class="sourceLineNo">3953</span>      LOG.warn("Table " + td.getTableName() +<a name="line.3953"></a>
+<span class="sourceLineNo">3954</span>          " already exists, continuing");<a name="line.3954"></a>
+<span class="sourceLineNo">3955</span>    } finally {<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span>      admin.close();<a name="line.3956"></a>
+<span class="sourceLineNo">3957</span>      unmanagedConnection.close();<a name="line.3957"></a>
+<span class="sourceLineNo">3958</span>    }<a name="line.3958"></a>
+<span class="sourceLineNo">3959</span>    return totalNumberOfRegions;<a name="line.3959"></a>
+<span class="sourceLineNo">3960</span>  }<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span><a name="line.3961"></a>
+<span class="sourceLineNo">3962</span>  public static int getMetaRSPort(Connection connection) throws IOException {<a name="line.3962"></a>
+<span class="sourceLineNo">3963</span>    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span>      return locator.getRegionLocation(Bytes.toBytes("")).getPort();<a name="line.3964"></a>
+<span class="sourceLineNo">3965</span>    }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span>  }<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span><a name="line.3967"></a>
+<span class="sourceLineNo">3968</span>  /**<a name="line.3968"></a>
+<span class="sourceLineNo">3969</span>   *  Due to async racing issue, a region may not be in<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span>   *  the online region list of a region server yet, after<a name="line.3970"></a>
+<span class="sourceLineNo">3971</span>   *  the assignment znode is deleted and the new assignment<a name="line.3971"></a>
+<span class="sourceLineNo">3972</span>   *  is recorded in master.<a name="line.3972"></a>
+<span class="sourceLineNo">3973</span>   */<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span>  public void assertRegionOnServer(<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>      final RegionInfo hri, final ServerName server,<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3976"></a>
+<span class="sourceLineNo">3977</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3977"></a>
+<span class="sourceLineNo">3978</span>    while (true) {<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3981"></a>
+<span class="sourceLineNo">3982</span>      if (now &gt; timeoutTime) break;<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span>      Thread.sleep(10);<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span>    }<a name="line.3984"></a>
+<span class="sourceLineNo">3985</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span>      + " on server " + server);<a name="line.3986"></a>
+<span class="sourceLineNo">3987</span>  }<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span><a name="line.3988"></a>
+<span class="sourceLineNo">3989</span>  /**<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span>   * Check to make sure the region is open on the specified<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span>   * region server, but not on any other one.<a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>   */<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span>  public void assertRegionOnlyOnServer(<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span>      final RegionInfo hri, final ServerName server,<a name="line.3994"></a>
+<span class="sourceLineNo">3995</span>      final long timeout) throws IOException, InterruptedException {<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span>    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.3996"></a>
+<span class="sourceLineNo">3997</span>    while (true) {<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span>      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);<a name="line.3998"></a>
+<span class="sourceLineNo">3999</span>      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span>        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span>          getHBaseCluster().getLiveRegionServerThreads();<a name="line.4001"></a>
+<span class="sourceLineNo">4002</span>        for (JVMClusterUtil.RegionServerThread rsThread: rsThreads) {<a name="line.4002"></a>
+<span class="sourceLineNo">4003</span>          HRegionServer rs = rsThread.getRegionServer();<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span>          if (server.equals(rs.getServerName())) {<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>            continue;<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span>          }<a name="line.4006"></a>
+<span class="sourceLineNo">4007</span>          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();<a name="line.4007"></a>
+<span class="sourceLineNo">4008</span>          for (HRegion r: hrs) {<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span>            assertTrue("Region should not be double assigned",<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span>              r.getRegionInfo().getRegionId() != hri.getRegionId());<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span>          }<a name="line.4011"></a>
+<span class="sourceLineNo">4012</span>        }<a name="line.4012"></a>
+<span class="sourceLineNo">4013</span>        return; // good, we are happy<a name="line.4013"></a>
+<span class="sourceLineNo">4014</span>      }<a name="line.4014"></a>
+<span class="sourceLineNo">4015</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.4015"></a>
+<span class="sourceLineNo">4016</span>      if (now &gt; timeoutTime) break;<a name="line.4016"></a>
+<span class="sourceLineNo">4017</span>      Thread.sleep(10);<a name="line.4017"></a>
+<span class="sourceLineNo">4018</span>    }<a name="line.4018"></a>
+<span class="sourceLineNo">4019</span>    fail("Could not find region " + hri.getRegionNameAsString()<a name="line.4019"></a>
+<span class="sourceLineNo">4020</span>      + " on server " + server);<a name="line.4020"></a>
+<span class="sourceLineNo">4021</span>  }<a name="line.4021"></a>
+<span class="sourceLineNo">4022</span><a name="line.4022"></a>
+<span class="sourceLineNo">4023</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {<a name="line.4023"></a>
+<span class="sourceLineNo">4024</span>    TableDescriptor td =<a name="line.4024"></a>
+<span class="sourceLineNo">4025</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4025"></a>
+<span class="sourceLineNo">4026</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4026"></a>
+<span class="sourceLineNo">4027</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);<a name="line.4027"></a>
+<span class="sourceLineNo">4028</span>  }<a name="line.4028"></a>
+<span class="sourceLineNo">4029</span><a name="line.4029"></a>
+<span class="sourceLineNo">4030</span>  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,<a name="line.4030"></a>
+<span class="sourceLineNo">4031</span>      BlockCache blockCache) throws IOException {<a name="line.4031"></a>
+<span class="sourceLineNo">4032</span>    TableDescriptor td =<a name="line.4032"></a>
+<span class="sourceLineNo">4033</span>        TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();<a name="line.4033"></a>
+<span class="sourceLineNo">4034</span>    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();<a name="line.4034"></a>
+<span class="sourceLineNo">4035</span>    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);<a name="line.4035"></a>
+<span class="sourceLineNo">4036</span>  }<a name="line.4036"></a>
+<span class="sourceLineNo">4037</span><a name="line.4037"></a>
+<span class="sourceLineNo">4038</span>  public void setFileSystemURI(String fsURI) {<a name="line.4038"></a>
+<span class="sourceLineNo">4039</span>    FS_URI = fsURI;<a name="line.4039"></a>
+<span class="sourceLineNo">4040</span>  }<a name="line.4040"></a>
+<span class="sourceLineNo">4041</span><a name="line.4041"></a>
+<span class="sourceLineNo">4042</span>  /**<a name="line.4042"></a>
+<span class="sourceLineNo">4043</span>   * Returns a {@link Predicate} for checking that there are no regions in transition in master<a name="line.4043"></a>
+<span class="sourceLineNo">4044</span>   */<a name="line.4044"></a>
+<span class="sourceLineNo">4045</span>  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {<a name="line.4045"></a>
+<span class="sourceLineNo">4046</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4046"></a>
+<span class="sourceLineNo">4047</span>      @Override<a name="line.4047"></a>
+<span class="sourceLineNo">4048</span>      public String explainFailure() throws IOException {<a name="line.4048"></a>
+<span class="sourceLineNo">4049</span>        final RegionStates regionStates = getMiniHBaseCluster().getMaster()<a name="line.4049"></a>
+<span class="sourceLineNo">4050</span>            .getAssignmentManager().getRegionStates();<a name="line.4050"></a>
+<span class="sourceLineNo">4051</span>        return "found in transition: " + regionStates.getRegionsInTransition().toString();<a name="line.4051"></a>
+<span class="sourceLineNo">4052</span>      }<a name="line.4052"></a>
+<span class="sourceLineNo">4053</span><a name="line.4053"></a>
+<span class="sourceLineNo">4054</span>      @Override<a name="line.4054"></a>
+<span class="sourceLineNo">4055</span>      public boolean evaluate() throws IOException {<a name="line.4055"></a>
+<span class="sourceLineNo">4056</span>        HMaster master = getMiniHBaseCluster().getMaster();<a name="line.4056"></a>
+<span class="sourceLineNo">4057</span>        if (master == null) return false;<a name="line.4057"></a>
+<span class="sourceLineNo">4058</span>        AssignmentManager am = master.getAssignmentManager();<a name="line.4058"></a>
+<span class="sourceLineNo">4059</span>        if (am == null) return false;<a name="line.4059"></a>
+<span class="sourceLineNo">4060</span>        return !am.hasRegionsInTransition();<a name="line.4060"></a>
+<span class="sourceLineNo">4061</span>      }<a name="line.4061"></a>
+<span class="sourceLineNo">4062</span>    };<a name="line.4062"></a>
+<span class="sourceLineNo">4063</span>  }<a name="line.4063"></a>
+<span class="sourceLineNo">4064</span><a name="line.4064"></a>
+<span class="sourceLineNo">4065</span>  /**<a name="line.4065"></a>
+<span class="sourceLineNo">4066</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4066"></a>
+<span class="sourceLineNo">4067</span>   */<a name="line.4067"></a>
+<span class="sourceLineNo">4068</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {<a name="line.4068"></a>
+<span class="sourceLineNo">4069</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4069"></a>
+<span class="sourceLineNo">4070</span>      @Override<a name="line.4070"></a>
+<span class="sourceLineNo">4071</span>      public String explainFailure() throws IOException {<a name="line.4071"></a>
+<span class="sourceLineNo">4072</span>        return explainTableState(tableName, TableState.State.ENABLED);<a name="line.4072"></a>
+<span class="sourceLineNo">4073</span>      }<a name="line.4073"></a>
+<span class="sourceLineNo">4074</span><a name="line.4074"></a>
+<span class="sourceLineNo">4075</span>      @Override<a name="line.4075"></a>
+<span class="sourceLineNo">4076</span>      public boolean evaluate() throws IOException {<a name="line.4076"></a>
+<span class="sourceLineNo">4077</span>        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);<a name="line.4077"></a>
+<span class="sourceLineNo">4078</span>      }<a name="line.4078"></a>
+<span class="sourceLineNo">4079</span>    };<a name="line.4079"></a>
+<span class="sourceLineNo">4080</span>  }<a name="line.4080"></a>
+<span class="sourceLineNo">4081</span><a name="line.4081"></a>
+<span class="sourceLineNo">4082</span>  /**<a name="line.4082"></a>
+<span class="sourceLineNo">4083</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4083"></a>
+<span class="sourceLineNo">4084</span>   */<a name="line.4084"></a>
+<span class="sourceLineNo">4085</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {<a name="line.4085"></a>
+<span class="sourceLineNo">4086</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4086"></a>
+<span class="sourceLineNo">4087</span>      @Override<a name="line.4087"></a>
+<span class="sourceLineNo">4088</span>      public String explainFailure() throws IOException {<a name="line.4088"></a>
+<span class="sourceLineNo">4089</span>        return explainTableState(tableName, TableState.State.DISABLED);<a name="line.4089"></a>
+<span class="sourceLineNo">4090</span>      }<a name="line.4090"></a>
+<span class="sourceLineNo">4091</span><a name="line.4091"></a>
+<span class="sourceLineNo">4092</span>      @Override<a name="line.4092"></a>
+<span class="sourceLineNo">4093</span>      public boolean evaluate() throws IOException {<a name="line.4093"></a>
+<span class="sourceLineNo">4094</span>        return getAdmin().isTableDisabled(tableName);<a name="line.4094"></a>
+<span class="sourceLineNo">4095</span>      }<a name="line.4095"></a>
+<span class="sourceLineNo">4096</span>    };<a name="line.4096"></a>
+<span class="sourceLineNo">4097</span>  }<a name="line.4097"></a>
+<span class="sourceLineNo">4098</span><a name="line.4098"></a>
+<span class="sourceLineNo">4099</span>  /**<a name="line.4099"></a>
+<span class="sourceLineNo">4100</span>   * Returns a {@link Predicate} for checking that table is enabled<a name="line.4100"></a>
+<span class="sourceLineNo">4101</span>   */<a name="line.4101"></a>
+<span class="sourceLineNo">4102</span>  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {<a name="line.4102"></a>
+<span class="sourceLineNo">4103</span>    return new ExplainingPredicate&lt;IOException&gt;() {<a name="line.4103"></a>
+<span class="sourceLineNo">4104</span>      @Override<a name="line.4104"></a>
+<span class="sourceLineNo">4105</span>      public String explainFailure() throws IOException {<a name="line.4105"></a>
+<span class="sourceLineNo">4106</span>        return explainTableAvailability(tableName);<a name="line.4106"></a>
+<span class="sourceLineNo">4107</span>      }<a name="line.4107"></a>
+<span class="sourceLineNo">4108</span><a name="line.4108"></a>
+<span class="sourceLineNo">4109</span>      @Override<a name="line.4109"></a>
+<span class="sourceLineNo">4110</span>      public boolean evaluate() throws IOException {<a name="line.4110"></a>
+<span class="sourceLineNo">4111</span>        boolean tableAvailable = getAdmin().isTableAvailable(tableName);<a name="line.4111"></a>
+<span class="sourceLineNo">4112</span>        if (tableAvailable) {<a name="line.4112"></a>
+<span class="sourceLineNo">4113</span>          try (Table table = getConnection().getTable(tableName)) {<a name="line.4113"></a>
+<span class="sourceLineNo">4114</span>            TableDescriptor htd = table.getDescriptor();<a name="line.4114"></a>
+<span class="sourceLineNo">4115</span>            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)<a name="line.4115"></a>
+<span class="sourceLineNo">4116</span>                .getAllRegionLocations()) {<a name="line.4116"></a>
+<span class="sourceLineNo">4117</span>              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())<a name="line.4117"></a>
+<span class="sourceLineNo">4118</span>                  .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()<a name="line.4118"></a>
+<span class="sourceLineNo">4119</span>                  .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);<a name="line.4119"></a>
+<span class="sourceLineNo">4120</span>              for (byte[] family : htd.getColumnFamilyNames()) {<a name="line.4120"></a>
+<span class="sourceLineNo">4121</span>                scan.addFamily(family);<a name="line.4121"></a>
+<span class="sourceLineNo">4122</span>              }<a name="line.4122"></a>
+<span class="sourceLineNo">4123</span>              try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.4123"></a>
+<span class="sourceLineNo">4124</span>                scanner.next();<a name="line.4124"></a>
+<span class="sourceLineNo">4125</span>              }<a name="line.4125"></a>
+<span class="sourceLineNo">4126</span>            }<a name="line.4126"></a>
+<span class="sourceLineNo">4127</span>          }<a name="line.4127"></a>
+<span class="sourceLineNo">4128</span>        }<a name="line.4128"></a>
+<span class="sourceLineNo">4129</span>        return tableAvailable;<a name="line.4129"></a>
+<span class="sourceLineNo">4130</span>      }<a name="line.4130"></a>
+<span class="sourceLineNo">4131</span>    };<a name="line.4131"></a>
+<span class="sourceLineNo">4132</span>  }<a name="line.4132"></a>
+<span class="sourceLineNo">4133</span><a name="line.4133"></a>
+<span class="sourceLineNo">4134</span>  /**<a name="line.4134"></a>
+<span class="sourceLineNo">4135</span>   * Wait until no regions in transition.<a name="line.4135"></a>
+<span class="sourceLineNo">4136</span>   * @param timeout How long to wait.<a name="line.4136"></a>
+<span class="sourceLineNo">4137</span>   * @throws IOException<a name="line.4137"></a>
+<span class="sourceLineNo">4138</span>   */<a name="line.4138"></a>
+<span class="sourceLineNo">4139</span>  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {<a name="line.4139"></a>
+<span class="sourceLineNo">4140</span>    waitFor(timeout, predicateNoRegionsInTransition());<a name="line.4140"></a>
+<span class="sourceLineNo">4141</span>  }<a name="line.4141"></a>
+<span class="sourceLineNo">4142</span><a name="line.4142"></a>
+<span class="sourceLineNo">4143</span>  /**<a name="line.4143"></a>
+<span class="sourceLineNo">4144</span>   * Wait until no regions in transition. (time limit 15min)<a name="line.4144"></a>
+<span class="sourceLineNo">4145</span>   * @throws IOException<a name="line.4145"></a>
+<span class="sourceLineNo">4146</span>   */<a name="line.4146"></a>
+<span class="sourceLineNo">4147</span>  public void waitUntilNoRegionsInTransition() throws IOException {<a name="line.4147"></a>
+<span class="sourceLineNo">4148</span>    waitUntilNoRegionsInTransition(15 * 60000);<a name="line.4148"></a>
+<span class="sourceLineNo">4149</span>  }<a name="line.4149"></a>
+<span class="sourceLineNo">4150</span><a name="line.4150"></a>
+<span class="sourceLineNo">4151</span>  /**<a name="line.4151"></a>
+<span class="sourceLineNo">4152</span>   * Wait until labels is ready in VisibilityLabelsCache.<a name="line.4152"></a>
+<span class="sourceLineNo">4153</span>   * @param timeoutMillis<a name="line.4153"></a>
+<span class="sourceLineNo">4154</span>   * @param labels<a name="line.4154"></a>
+<span class="sourceLineNo">4155</span>   */<a name="line.4155"></a>
+<span class="sourceLineNo">4156</span>  public void waitLabelAvailable(long timeoutMillis, final String... labels) {<a name="line.4156"></a>
+<span class="sourceLineNo">4157</span>    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();<a name="line.4157"></a>
+<span class="sourceLineNo">4158</span>    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {<a name="line.4158"></a>
+<span class="sourceLineNo">4159</span><a name="line.4159"></a>
+<span class="sourceLineNo">4160</span>      @Override<a name="line.4160"></a>
+<span class="sourceLineNo">4161</span>      public boolean evaluate() {<a name="line.4161"></a>
+<span class="sourceLineNo">4162</span>        for (String label : labels) {<a name="line.4162"></a>
+<span class="sourceLineNo">4163</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4163"></a>
+<span class="sourceLineNo">4164</span>            return false;<a name="line.4164"></a>
+<span class="sourceLineNo">4165</span>          }<a name="line.4165"></a>
+<span class="sourceLineNo">4166</span>        }<a name="line.4166"></a>
+<span class="sourceLineNo">4167</span>        return true;<a name="line.4167"></a>
+<span class="sourceLineNo">4168</span>      }<a name="line.4168"></a>
+<span class="sourceLineNo">4169</span><a name="line.4169"></a>
+<span class="sourceLineNo">4170</span>      @Override<a name="line.4170"></a>
+<span class="sourceLineNo">4171</span>      public String explainFailure() {<a name="line.4171"></a>
+<span class="sourceLineNo">4172</span>        for (String label : labels) {<a name="line.4172"></a>
+<span class="sourceLineNo">4173</span>          if (labelsCache.getLabelOrdinal(label) == 0) {<a name="line.4173"></a>
+<span class="sourceLineNo">4174</span>            return label + " is not available yet";<a name="line.4174"></a>
+<span class="sourceLineNo">4175</span>          }<a name="line.4175"></a>
+<span class="sourceLineNo">4176</span>        }<a name="line.4176"></a>
+<span class="sourceLineNo">4177</span>        return "";<a name="line.4177"></a>
+<span class="sourceLineNo">4178</span>      }<a name="line.4178"></a>
+<span class="sourceLineNo">4179</span>    });<a name="line.4179"></a>
+<span class="sourceLineNo">4180</span>  }<a name="line.4180"></a>
+<span class="sourceLineNo">4181</span><a name="line.4181"></a>
+<span class="sourceLineNo">4182</span>  /**<a name="line.4182"></a>
+<span class="sourceLineNo">4183</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4183"></a>
+<span class="sourceLineNo">4184</span>   * encoding, bloom codecs available.<a name="line.4184"></a>
+<span class="sourceLineNo">4185</span>   * @return the list of column descriptors<a name="line.4185"></a>
+<span class="sourceLineNo">4186</span>   */<a name="line.4186"></a>
+<span class="sourceLineNo">4187</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {<a name="line.4187"></a>
+<span class="sourceLineNo">4188</span>    return generateColumnDescriptors("");<a name="line.4188"></a>
+<span class="sourceLineNo">4189</span>  }<a name="line.4189"></a>
+<span class="sourceLineNo">4190</span><a name="line.4190"></a>
+<span class="sourceLineNo">4191</span>  /**<a name="line.4191"></a>
+<span class="sourceLineNo">4192</span>   * Create a set of column descriptors with the combination of compression,<a name="line.4192"></a>
+<span class="sourceLineNo">4193</span>   * encoding, bloom codecs available.<a name="line.4193"></a>
+<span class="sourceLineNo">4194</span>   * @param prefix family names prefix<a name="line.4194"></a>
+<span class="sourceLineNo">4195</span>   * @return the list of column descriptors<a name="line.4195"></a>
+<span class="sourceLineNo">4196</span>   */<a name="line.4196"></a>
+<span class="sourceLineNo">4197</span>  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {<a name="line.4197"></a>
+<span class="sourceLineNo">4198</span>    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();<a name="line.4198"></a>
+<span class="sourceLineNo">4199</span>    long familyId = 0;<a name="line.4199"></a>
+<span class="sourceLineNo">4200</span>    for (Compression.Algorithm compressionType: getSupportedCompressionAlgorithms()) {<a name="line.4200"></a>
+<span class="sourceLineNo">4201</span>      for (DataBlockEncoding encodingType: DataBlockEncoding.values()) {<a name="line.4201"></a>
+<span class="sourceLineNo">4202</span>        for (BloomType bloomType: BloomType.values()) {<a name="line.4202"></a>
+<span class="sourceLineNo">4203</span>          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);<a name="line.4203"></a>
+<span class="sourceLineNo">4204</span>          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =<a name="line.4204"></a>
+<span class="sourceLineNo">4205</span>            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));<a name="line.4205"></a>
+<span class="sourceLineNo">4206</span>          columnFamilyDescriptorBuilder.setCompressionType(compressionType);<a name="line.4206"></a>
+<span class="sourceLineNo">4207</span>          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);<a name="line.4207"></a>
+<span class="sourceLineNo">4208</span>          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);<a name="line.4208"></a>
+<span class="sourceLineNo">4209</span>          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());<a name="line.4209"></a>
+<span class="sourceLineNo">4210</span>          familyId++;<a name="line.4210"></a>
+<span class="sourceLineNo">4211</span>        }<a name="line.4211"></a>
+<span class="sourceLineNo">4212</span>      }<a name="line.4212"></a>
+<span class="sourceLineNo">4213</span>    }<a name="line.4213"></a>
+<span class="sourceLineNo">4214</span>    return columnFamilyDescriptors;<a name="line.4214"></a>
+<span class="sourceLineNo">4215</span>  }<a name="line.4215"></a>
+<span class="sourceLineNo">4216</span><a name="line.4216"></a>
+<span class="sourceLineNo">4217</span>  /**<a name="line.4217"></a>
+<span class="sourceLineNo">4218</span>   * Get supported compression algorithms.<a name="line.4218"></a>
+<span class="sourceLineNo">4219</span>   * @return supported compression algorithms.<a name="line.4219"></a>
+<span class="sourceLineNo">4220</span>   */<a name="line.4220"></a>
+<span class="sourceLineNo">4221</span>  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {<a name="line.4221"></a>
+<span class="sourceLineNo">4222</span>    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();<a name="line.4222"></a>
+<span class="sourceLineNo">4223</span>    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();<a name="line.4223"></a>
+<span class="sourceLineNo">4224</span>    for (String algoName : allAlgos) {<a name="line.4224"></a>
+<span class="sourceLineNo">4225</span>      try {<a name="line.4225"></a>
+<span class="sourceLineNo">4226</span>        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);<a name="line.4226"></a>
+<span class="sourceLineNo">4227</span>        algo.getCompressor();<a name="line.4227"></a>
+<span class="sourceLineNo">4228</span>        supportedAlgos.add(algo);<a name="line.4228"></a>
+<span class="sourceLineNo">4229</span>      } catch (Throwable t) {<a name="line.4229"></a>
+<span class="sourceLineNo">4230</span>        // this algo is not available<a name="line.4230"></a>
+<span class="sourceLineNo">4231</span>      }<a name="line.4231"></a>
+<span class="sourceLineNo">4232</span>    }<a name="line.4232"></a>
+<span class="sourceLineNo">4233</span>    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);<a name="line.4233"></a>
+<span class="sourceLineNo">4234</span>  }<a name="line.4234"></a>
+<span class="sourceLineNo">4235</span><a name="line.4235"></a>
+<span class="sourceLineNo">4236</span>  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {<a name="line.4236"></a>
+<span class="sourceLineNo">4237</span>    Scan scan = new Scan().withStartRow(row);<a name="line.4237"></a>
+<span class="sourceLineNo">4238</span>    scan.setReadType(ReadType.PREAD);<a name="line.4238"></a>
+<span class="sourceLineNo">4239</span>    scan.setCaching(1);<a name="line.4239"></a>
+<span class="sourceLineNo">4240</span>    scan.setReversed(true);<a name="line.4240"></a>
+<span class="sourceLineNo">4241</span>    scan.addFamily(family);<a name="line.4241"></a>
+<span class="sourceLineNo">4242</span>    try (RegionScanner scanner = r.getScanner(scan)) {<a name="line.4242"></a>
+<span class="sourceLineNo">4243</span>      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);<a name="line.4243"></a>
+<span class="sourceLineNo">4244</span>      scanner.next(cells);<a name="line.4244"></a>
+<span class="sourceLineNo">4245</span>      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {<a name="line.4245"></a>
+<span class="sourceLineNo">4246</span>        return null;<a name="line.4246"></a>
+<span class="sourceLineNo">4247</span>      }<a name="line.4247"></a>
+<span class="sourceLineNo">4248</span>      return Result.create(cells);<a name="line.4248"></a>
+<span class="sourceLineNo">4249</span>    }<a name="line.4249"></a>
+<span class="sourceLineNo">4250</span>  }<a name="line.4250"></a>
+<span class="sourceLineNo">4251</span><a name="line.4251"></a>
+<span class="sourceLineNo">4252</span>  private boolean isTargetTable(final byte[] inRow, Cell c) {<a name="line.4252"></a>
+<span class="sourceLineNo">4253</span>    String inputRowString = Bytes.toString(inRow);<a name="line.4253"></a>
+<span class="sourceLineNo">4254</span>    int i = inputRowString.indexOf(HConstants.DELIMITER);<a name="line.4254"></a>
+<span class="sourceLineNo">4255</span>    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());<a name="line.4255"></a>
+<span class="sourceLineNo">4256</span>    int o = outputRowString.indexOf(HConstants.DELIMITER);<a name="line.4256"></a>
+<span class="sourceLineNo">4257</span>    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));<a name="line.4257"></a>
+<span class="sourceLineNo">4258</span>  }<a name="line.4258"></a>
+<span class="sourceLineNo">4259</span><a name="line.4259"></a>
+<span class="sourceLineNo">4260</span>  /**<a name="line.4260"></a>
+<span class="sourceLineNo">4261</span>   * Sets up {@link MiniKdc} for testing security.<a name="line.4261"></a>
+<span class="sourceLineNo">4262</span>   * Uses {@link HBaseKerberosUtils} to set the given keytab file as<a name="line.4262"></a>
+<span class="sourceLineNo">4263</span>   * {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}.<a name="line.4263"></a>
+<span class="sourceLineNo">4264</span>   * FYI, there is also the easier-to-use kerby KDC server and utility for using it,<a name="line.4264"></a>
+<span class="sourceLineNo">4265</span>   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;<a name="line.4265"></a>
+<span class="sourceLineNo">4266</span>   * less baggage. It came in in HBASE-5291.<a name="line.4266"></a>
+<span class="sourceLineNo">4267</span>   */<a name="line.4267"></a>
+<span class="sourceLineNo">4268</span>  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {<a name="line.4268"></a>
+<span class="sourceLineNo">4269</span>    Properties conf = MiniKdc.createConf();<a name="line.4269"></a>
+<span class="sourceLineNo">4270</span>    conf.put(MiniKdc.DEBUG, true);<a name="line.4270"></a>
+<span class="sourceLineNo">4271</span>    MiniKdc kdc = null;<a name="line.4271"></a>
+<span class="sourceLineNo">4272</span>    File dir = null;<a name="line.4272"></a>
+<span class="sourceLineNo">4273</span>    // There is time lag between selecting a port and trying to bind with it. It's possible that<a name="line.4273"></a>
+<span class="sourceLineNo">4274</span>    // another service captures the port in between which'll result in BindException.<a name="line.4274"></a>
+<span class="sourceLineNo">4275</span>    boolean bindException;<a name="line.4275"></a>
+<span class="sourceLineNo">4276</span>    int numTries = 0;<a name="line.4276"></a>
+<span class="sourceLineNo">4277</span>    do {<a name="line.4277"></a>
+<span class="sourceLineNo">4278</span>      try {<a name="line.4278"></a>
+<span class="sourceLineNo">4279</span>        bindException = false;<a name="line.4279"></a>
+<span class="sourceLineNo">4280</span>        dir = new File(getDataTestDir("kdc").toUri().getPath());<a name="line.4280"></a>
+<span class="sourceLineNo">4281</span>        kdc = new MiniKdc(conf, dir);<a name="line.4281"></a>
+<span class="sourceLineNo">4282</span>        kdc.start();<a name="line.4282"></a>
+<span class="sourceLineNo">4283</span>      } catch (BindException e) {<a name="line.4283"></a>
+<span class="sourceLineNo">4284</span>        FileUtils.deleteDirectory(dir);  // clean directory<a name="line.4284"></a>
+<span class="sourceLineNo">4285</span>        numTries++;<a name="line.4285"></a>
+<span class="sourceLineNo">4286</span>        if (numTries == 3) {<a name="line.4286"></a>
+<span class="sourceLineNo">4287</span>          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");<a name="line.4287"></a>
+<span class="sourceLineNo">4288</span>          throw e;<a name="line.4288"></a>
+<span class="sourceLineNo">4289</span>        }<a name="line.4289"></a>
+<span class="sourceLineNo">4290</span>        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");<a name="line.4290"></a>
+<span class="sourceLineNo">4291</span>        bindException = true;<a name="line.4291"></a>
+<span class="sourceLineNo">4292</span>      }<a name="line.4292"></a>
+<span class="sourceLineNo">4293</span>    } while (bindException);<a name="line.4293"></a>
+<span class="sourceLineNo">4294</span>    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>    return kdc;<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>  }<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span><a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>  public int getNumHFiles(final TableName tableName, final byte[] family) {<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>    int numHFiles = 0;<a name="line.4299"></a>
+<span class="sourceLineNo">4300</span>    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.4300"></a>
+<span class="sourceLineNo">4301</span>      numHFiles+= getNumHFilesForRS(regionServerThread.getRegionServer(), tableName,<a name="line.4301"></a>
+<span class="sourceLineNo">4302</span>                                    family);<a name="line.4302"></a>
+<span class="sourceLineNo">4303</span>    }<a name="line.4303"></a>
+<span class="sourceLineNo">4304</span>    return numHFiles;<a name="line.4304"></a>
+<span class="sourceLineNo">4305</span>  }<a name="line.4305"></a>
+<span class="sourceLineNo">4306</span><a name="line.4306"></a>
+<span class="sourceLineNo">4307</span>  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,<a name="line.4307"></a>
+<span class="sourceLineNo">4308</span>                               final byte[] family) {<a name="line.4308"></a>
+<span class="sourceLineNo">4309</span>    int numHFiles = 0;<a name="line.4309"></a>
+<span class="sourceLineNo">4310</span>    for (Region region : rs.getRegions(tableName)) {<a name="line.4310"></a>
+<span class="sourceLineNo">4311</span>      numHFiles += region.getStore(family).getStorefilesCount();<a name="line.4311"></a>
+<span class="sourceLineNo">4312</span>    }<a name="line.4312"></a>
+<span class="sourceLineNo">4313</span>    return numHFiles;<a name="line.4313"></a>
+<span class="sourceLineNo">4314</span>  }<a name="line.4314"></a>
+<span class="sourceLineNo">4315</span><a name="line.4315"></a>
+<span class="sourceLineNo">4316</span>  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {<a name="line.4316"></a>
+<span class="sourceLineNo">4317</span>    assertEquals(ltd.getValues().hashCode(), rtd.getValues().hashCode());<a name="line.4317"></a>
+<span class="sourceLineNo">4318</span>    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());<a name="line.4318"></a>
+<span class="sourceLineNo">4319</span>    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());<a name="line.4319"></a>
+<span class="sourceLineNo">4320</span>    assertEquals(ltdFamilies.size(), rtdFamilies.size());<a name="line.4320"></a>
+<span class="sourceLineNo">4321</span>    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(), it2 =<a name="line.4321"></a>
+<span class="sourceLineNo">4322</span>         rtdFamilies.iterator(); it.hasNext();) {<a name="line.4322"></a>
+<span class="sourceLineNo">4323</span>      assertEquals(0,<a name="line.4323"></a>
+<span class="sourceLineNo">4324</span>          ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));<a name="line.4324"></a>
+<span class="sourceLineNo">4325</span>    }<a name="line.4325"></a>
+<span class="sourceLineNo">4326</span>  }<a name="line.4326"></a>
+<span class="sourceLineNo">4327</span><a name="line.4327"></a>
+<span class="sourceLineNo">4328</span>  /**<a name="line.4328"></a>
+<span class="sourceLineNo">4329</span>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.4329"></a>
+<span class="sourceLineNo">4330</span>   * invocations.<a name="line.4330"></a>
+<span class="sourceLineNo">4331</span>   */<a name="line.4331"></a>
+<span class="sourceLineNo">4332</span>  public static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.4332"></a>
+<span class="sourceLineNo">4333</span>    throws InterruptedException {<a name="line.4333"></a>
+<span class="sourceLineNo">4334</span>    try {<a name="line.4334"></a>
+<span class="sourceLineNo">4335</span>      while (!condition.getAsBoolean()) {<a name="line.4335"></a>
+<span class="sourceLineNo">4336</span>        Thread.sleep(sleepMillis);<a name="line.4336"></a>
+<span class="sourceLineNo">4337</span>      }<a name="line.4337"></a>
+<span class="sourceLineNo">4338</span>    } catch (RuntimeException e) {<a name="line.4338"></a>
+<span class="sourceLineNo">4339</span>      if (e.getCause() instanceof AssertionError) {<a name="line.4339"></a>
+<span class="sourceLineNo">4340</span>        throw (AssertionError) e.getCause();<a name="line.4340"></a>
+<span class="sourceLineNo">4341</span>      }<a name="line.4341"></a>
+<span class="sourceLineNo">4342</span>      throw e;<a name="line.4342"></a>
+<span class="sourceLineNo">4343</span>    }<a name="line.4343"></a>
+<span class="sourceLineNo">4344</span>  }<a name="line.4344"></a>
+<span class="sourceLineNo">4345</span>}<a name="line.4345"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html
index 76bc14f..60c88de 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide5.html
@@ -62,2910 +62,2912 @@
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.TableName;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableNameTestRule;<a name="line.55"></a>
 <span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Waiter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.filter.InclusiveStopFilter;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.filter.KeyOnlyFilter;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.filter.RegexStringComparator;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.filter.RowFilter;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.filter.SubstringComparator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.filter.ValueFilter;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.io.TimeRange;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.junit.AfterClass;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.junit.ClassRule;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.junit.Ignore;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.junit.Rule;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.junit.Test;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.junit.experimental.categories.Category;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.junit.runner.RunWith;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.junit.runners.Parameterized;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.slf4j.Logger;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.slf4j.LoggerFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MultiRowMutationService;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MutateRowsRequest;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MutateRowsResponse;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>/**<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * Run tests that use the HBase clients; {@link Table}.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * Sets up the HBase mini cluster once at start and runs through all client tests.<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * Each creates a table named for the method and does its stuff against that.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> *<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * Parameterized to run with different registry implementations.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>@Category({LargeTests.class, ClientTests.class})<a name="line.110"></a>
-<span class="sourceLineNo">111</span>@SuppressWarnings ("deprecation")<a name="line.111"></a>
-<span class="sourceLineNo">112</span>@RunWith(Parameterized.class)<a name="line.112"></a>
-<span class="sourceLineNo">113</span>public class TestFromClientSide5 extends FromClientSideBase {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private static final Logger LOG = LoggerFactory.getLogger(TestFromClientSide5.class);<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  @ClassRule<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      HBaseClassTestRule.forClass(TestFromClientSide5.class);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Rule<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // To keep the child classes happy.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  TestFromClientSide5() {}<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public TestFromClientSide5(Class registry, int numHedgedReqs) throws Exception {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    initialize(registry, numHedgedReqs, MultiRowMutationEndpoint.class);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  @Parameterized.Parameters<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public static Collection parameters() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    return Arrays.asList(new Object[][] {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        { MasterRegistry.class, 1},<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        { MasterRegistry.class, 2},<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        { ZKConnectionRegistry.class, 1}<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    });<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  @AfterClass public static void tearDownAfterClass() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    afterClass();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  @Test<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public void testGetClosestRowBefore() throws IOException, InterruptedException {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    final TableName tableName = name.getTableName();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    final byte[] firstRow = Bytes.toBytes("row111");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    final byte[] secondRow = Bytes.toBytes("row222");<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    final byte[] thirdRow = Bytes.toBytes("row333");<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    final byte[] forthRow = Bytes.toBytes("row444");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    final byte[] beforeFirstRow = Bytes.toBytes("row");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    final byte[] beforeSecondRow = Bytes.toBytes("row22");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    final byte[] beforeThirdRow = Bytes.toBytes("row33");<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    final byte[] beforeForthRow = Bytes.toBytes("row44");<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>    try (Table table =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        TEST_UTIL.createTable(tableName,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          new byte[][] { HConstants.CATALOG_FAMILY, Bytes.toBytes("info2") }, 1, 1024);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>      // set block size to 64 to making 2 kvs into one block, bypassing the walkForwardInSingleRow<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      // in Store.rowAtOrBeforeFromStoreFile<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      String regionName = locator.getAllRegionLocations().get(0).getRegion().getEncodedName();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      HRegion region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getRegion(regionName);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      Put put1 = new Put(firstRow);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      Put put2 = new Put(secondRow);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      Put put3 = new Put(thirdRow);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      Put put4 = new Put(forthRow);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      byte[] one = new byte[] { 1 };<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      byte[] two = new byte[] { 2 };<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      byte[] three = new byte[] { 3 };<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      byte[] four = new byte[] { 4 };<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>      put1.addColumn(HConstants.CATALOG_FAMILY, null, one);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      put2.addColumn(HConstants.CATALOG_FAMILY, null, two);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      put3.addColumn(HConstants.CATALOG_FAMILY, null, three);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      put4.addColumn(HConstants.CATALOG_FAMILY, null, four);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      table.put(put1);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      table.put(put2);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      table.put(put3);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      table.put(put4);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      region.flush(true);<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Result result;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>      // Test before first that null is returned<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      result = getReverseScanResult(table, beforeFirstRow);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      assertNull(result);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // Test at first that first is returned<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      result = getReverseScanResult(table, firstRow);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      assertTrue(Bytes.equals(result.getRow(), firstRow));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one));<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // Test in between first and second that first is returned<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      result = getReverseScanResult(table, beforeSecondRow);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(Bytes.equals(result.getRow(), firstRow));<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one));<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // Test at second make sure second is returned<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      result = getReverseScanResult(table, secondRow);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      assertTrue(Bytes.equals(result.getRow(), secondRow));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two));<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      // Test in second and third, make sure second is returned<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      result = getReverseScanResult(table, beforeThirdRow);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      assertTrue(Bytes.equals(result.getRow(), secondRow));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two));<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // Test at third make sure third is returned<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      result = getReverseScanResult(table, thirdRow);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      assertTrue(Bytes.equals(result.getRow(), thirdRow));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three));<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // Test in third and forth, make sure third is returned<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      result = getReverseScanResult(table, beforeForthRow);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      assertTrue(Bytes.equals(result.getRow(), thirdRow));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three));<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>      // Test at forth make sure forth is returned<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      result = getReverseScanResult(table, forthRow);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      assertTrue(Bytes.equals(result.getRow(), forthRow));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four));<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      // Test after forth make sure forth is returned<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      result = getReverseScanResult(table, Bytes.add(forthRow, one));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      assertTrue(Bytes.equals(result.getRow(), forthRow));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  private Result getReverseScanResult(Table table, byte[] row) throws IOException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    Scan scan = new Scan().withStartRow(row);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    scan.setSmall(true);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    scan.setReversed(true);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    scan.setCaching(1);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      return scanner.next();<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><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * For HBASE-2156<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testScanVariableReuse() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    Scan scan = new Scan();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    scan.addFamily(FAMILY);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    scan.addColumn(FAMILY, ROW);<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertEquals(1, scan.getFamilyMap().get(FAMILY).size());<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    scan = new Scan();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    scan.addFamily(FAMILY);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>    assertNull(scan.getFamilyMap().get(FAMILY));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    assertTrue(scan.getFamilyMap().containsKey(FAMILY));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  @Test<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  public void testMultiRowMutation() throws Exception {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    LOG.info("Starting testMultiRowMutation");<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    final TableName tableName = name.getTableName();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    final byte [] ROW3 = Bytes.toBytes("testRow3");<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      // Add initial data<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      t.batch(Arrays.asList(<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        new Put(ROW2).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(1L)),<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        new Put(ROW3).addColumn(FAMILY, QUALIFIER, VALUE)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      ), new Object[3]);<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // Execute MultiRowMutation<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      Put put = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      Delete delete = new Delete(ROW1);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>      Increment increment = new Increment(ROW2).addColumn(FAMILY, QUALIFIER, 1L);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.INCREMENT, increment);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      Append append = new Append(ROW3).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      MutationProto m4 = ProtobufUtil.toMutation(MutationType.APPEND, append);<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      mrmBuilder.addMutationRequest(m1);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      mrmBuilder.addMutationRequest(m2);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      mrmBuilder.addMutationRequest(m3);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      mrmBuilder.addMutationRequest(m4);<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      MultiRowMutationService.BlockingInterface service =<a name="line.303"></a>
-<span class="sourceLineNo">304</span>              MultiRowMutationService.newBlockingStub(channel);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      // Assert<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      assertTrue(response.getProcessed());<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>      Result r = t.get(new Get(ROW));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>      r = t.get(new Get(ROW1));<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      assertTrue(r.isEmpty());<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      r = t.get(new Get(ROW2));<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      assertEquals(2L, Bytes.toLong(r.getValue(FAMILY, QUALIFIER)));<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>      r = t.get(new Get(ROW3));<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      assertEquals(Bytes.toString(VALUE) + Bytes.toString(VALUE),<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<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>  @Test<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public void testMultiRowMutationWithSingleConditionWhenConditionMatches() throws Exception {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    final TableName tableName = name.getTableName();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      // Add initial data<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // Execute MultiRowMutation with conditions<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      Delete delete = new Delete(ROW2);<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      mrmBuilder.addMutationRequest(m1);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      mrmBuilder.addMutationRequest(m2);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      mrmBuilder.addMutationRequest(m3);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        CompareOperator.EQUAL, VALUE2, null));<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      MultiRowMutationService.BlockingInterface service =<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>      // Assert<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      assertTrue(response.getProcessed());<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>      Result r = t.get(new Get(ROW));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>      r = t.get(new Get(ROW1));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>      r = t.get(new Get(ROW2));<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      assertTrue(r.isEmpty());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Test<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public void testMultiRowMutationWithSingleConditionWhenConditionNotMatch() throws Exception {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    final TableName tableName = name.getTableName();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      // Add initial data<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      // Execute MultiRowMutation with conditions<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      Delete delete = new Delete(ROW2);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      mrmBuilder.addMutationRequest(m1);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      mrmBuilder.addMutationRequest(m2);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      mrmBuilder.addMutationRequest(m3);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        CompareOperator.EQUAL, VALUE1, null));<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      MultiRowMutationService.BlockingInterface service =<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>      // Assert<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      assertFalse(response.getProcessed());<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      Result r = t.get(new Get(ROW));<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      assertTrue(r.isEmpty());<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>      r = t.get(new Get(ROW1));<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      assertTrue(r.isEmpty());<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>      r = t.get(new Get(ROW2));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>  @Test<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public void testMultiRowMutationWithMultipleConditionsWhenConditionsMatch() throws Exception {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    final TableName tableName = name.getTableName();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      // Add initial data<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>      // Execute MultiRowMutation with conditions<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      Delete delete = new Delete(ROW2);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      mrmBuilder.addMutationRequest(m1);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      mrmBuilder.addMutationRequest(m2);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      mrmBuilder.addMutationRequest(m3);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW, FAMILY, QUALIFIER,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        CompareOperator.EQUAL, null, null));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        CompareOperator.EQUAL, VALUE2, null));<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      MultiRowMutationService.BlockingInterface service =<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // Assert<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      assertTrue(response.getProcessed());<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>      Result r = t.get(new Get(ROW));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>      r = t.get(new Get(ROW1));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      r = t.get(new Get(ROW2));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      assertTrue(r.isEmpty());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>  @Test<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public void testMultiRowMutationWithMultipleConditionsWhenConditionsNotMatch() throws Exception {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    final TableName tableName = name.getTableName();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Add initial data<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>      // Execute MultiRowMutation with conditions<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      Delete delete = new Delete(ROW2);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      mrmBuilder.addMutationRequest(m1);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      mrmBuilder.addMutationRequest(m2);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      mrmBuilder.addMutationRequest(m3);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW1, FAMILY, QUALIFIER,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        CompareOperator.EQUAL, null, null));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        CompareOperator.EQUAL, VALUE1, null));<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      MultiRowMutationService.BlockingInterface service =<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      // Assert<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      assertFalse(response.getProcessed());<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>      Result r = t.get(new Get(ROW));<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      assertTrue(r.isEmpty());<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>      r = t.get(new Get(ROW1));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      assertTrue(r.isEmpty());<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>      r = t.get(new Get(ROW2));<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  @Test<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  public void testMultiRowMutationWithFilterConditionWhenConditionMatches() throws Exception {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    final TableName tableName = name.getTableName();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    final byte [] QUALIFIER2 = Bytes.toBytes("testQualifier2");<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    final byte [] VALUE3 = Bytes.toBytes("testValue3");<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      // Add initial data<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2)<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        .addColumn(FAMILY, QUALIFIER2, VALUE3));<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>      // Execute MultiRowMutation with conditions<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      Delete delete = new Delete(ROW2);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      mrmBuilder.addMutationRequest(m1);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      mrmBuilder.addMutationRequest(m2);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      mrmBuilder.addMutationRequest(m3);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, new FilterList(<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER, CompareOperator.EQUAL, VALUE2),<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER2, CompareOperator.EQUAL, VALUE3)), null));<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      MultiRowMutationService.BlockingInterface service =<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // Assert<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      assertTrue(response.getProcessed());<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>      Result r = t.get(new Get(ROW));<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>      r = t.get(new Get(ROW1));<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>      r = t.get(new Get(ROW2));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      assertTrue(r.isEmpty());<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  @Test<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  public void testMultiRowMutationWithFilterConditionWhenConditionNotMatch() throws Exception {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    final TableName tableName = name.getTableName();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    final byte [] QUALIFIER2 = Bytes.toBytes("testQualifier2");<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    final byte [] VALUE3 = Bytes.toBytes("testValue3");<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      // Add initial data<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2)<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        .addColumn(FAMILY, QUALIFIER2, VALUE3));<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>      // Execute MultiRowMutation with conditions<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      Delete delete = new Delete(ROW2);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      mrmBuilder.addMutationRequest(m1);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      mrmBuilder.addMutationRequest(m2);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      mrmBuilder.addMutationRequest(m3);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, new FilterList(<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER, CompareOperator.EQUAL, VALUE2),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER2, CompareOperator.EQUAL, VALUE2)), null));<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      MultiRowMutationService.BlockingInterface service =<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>      // Assert<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      assertFalse(response.getProcessed());<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>      Result r = t.get(new Get(ROW));<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      assertTrue(r.isEmpty());<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>      r = t.get(new Get(ROW1));<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      assertTrue(r.isEmpty());<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      r = t.get(new Get(ROW2));<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  @Test<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  public void testRowMutations() throws Exception {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    LOG.info("Starting testRowMutations");<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    final TableName tableName = name.getTableName();<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      byte[][] QUALIFIERS = new byte[][] { Bytes.toBytes("a"), Bytes.toBytes("b"),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        Bytes.toBytes("c"), Bytes.toBytes("d") };<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // Test for Put operations<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      RowMutations arm = new RowMutations(ROW);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      Put p = new Put(ROW);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      p.addColumn(FAMILY, QUALIFIERS[0], VALUE);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      arm.add(p);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      Result r = t.mutateRow(arm);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      assertTrue(r.getExists());<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      assertTrue(r.isEmpty());<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      Get g = new Get(ROW);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      r = t.get(g);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>      // Test for Put and Delete operations<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      arm = new RowMutations(ROW);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      p = new Put(ROW);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      p.addColumn(FAMILY, QUALIFIERS[1], VALUE);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      arm.add(p);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      Delete d = new Delete(ROW);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      d.addColumns(FAMILY, QUALIFIERS[0]);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      arm.add(d);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // TODO: Trying mutateRow again. The batch was failing with a one try only.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      r = t.mutateRow(arm);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      assertTrue(r.getExists());<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      assertTrue(r.isEmpty());<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>      r = t.get(g);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[1])));<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      assertNull(r.getValue(FAMILY, QUALIFIERS[0]));<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>      // Test for Increment and Append operations<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      arm = new RowMutations(ROW);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      arm.add(Arrays.asList(<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        new Put(ROW).addColumn(FAMILY, QUALIFIERS[0], VALUE),<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        new Delete(ROW).addColumns(FAMILY, QUALIFIERS[1]),<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        new Increment(ROW).addColumn(FAMILY, QUALIFIERS[2], 5L),<a name="line.656"></a>
-<span class="sourceLineNo">657</span>        new Append(ROW).addColumn(FAMILY, QUALIFIERS[3], Bytes.toBytes("abc"))<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      ));<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      r = t.mutateRow(arm);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      assertTrue(r.getExists());<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      assertEquals(5L, Bytes.toLong(r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      assertEquals("abc", Bytes.toString(r.getValue(FAMILY, QUALIFIERS[3])));<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      g = new Get(ROW);<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      r = t.get(g);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      assertNull(r.getValue(FAMILY, QUALIFIERS[1]));<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      assertEquals(5L, Bytes.toLong(r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      assertEquals("abc", Bytes.toString(r.getValue(FAMILY, QUALIFIERS[3])));<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>      // Test that we get a region level exception<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>        arm = new RowMutations(ROW);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        p = new Put(ROW);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        p.addColumn(new byte[] { 'b', 'o', 'g', 'u', 's' }, QUALIFIERS[0], VALUE);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        arm.add(p);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        t.mutateRow(arm);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        fail("Expected NoSuchColumnFamilyException");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      } catch (NoSuchColumnFamilyException e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        return;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      } catch (RetriesExhaustedWithDetailsException e) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        for (Throwable rootCause : e.getCauses()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          if (rootCause instanceof NoSuchColumnFamilyException) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            return;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        throw e;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>  @Test<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  public void testBatchAppendWithReturnResultFalse() throws Exception {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    LOG.info("Starting testBatchAppendWithReturnResultFalse");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    final TableName tableName = name.getTableName();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      Append append1 = new Append(Bytes.toBytes("row1"));<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      append1.setReturnResults(false);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      append1.addColumn(FAMILY, Bytes.toBytes("f1"), Bytes.toBytes("value1"));<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      Append append2 = new Append(Bytes.toBytes("row1"));<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      append2.setReturnResults(false);<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      append2.addColumn(FAMILY, Bytes.toBytes("f1"), Bytes.toBytes("value2"));<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      List&lt;Append&gt; appends = new ArrayList&lt;&gt;();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      appends.add(append1);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      appends.add(append2);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      Object[] results = new Object[2];<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      table.batch(appends, results);<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      assertEquals(2, results.length);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      for (Object r : results) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        Result result = (Result) r;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        assertTrue(result.isEmpty());<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  @Test<a name="line.716"></a>
-<span class="sourceLineNo">717</span>  public void testAppend() throws Exception {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    LOG.info("Starting testAppend");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    final TableName tableName = name.getTableName();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      byte[] v1 = Bytes.toBytes("42");<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      byte[] v2 = Bytes.toBytes("23");<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      byte[][] QUALIFIERS = new byte[][]{<a name="line.723"></a>
-<span class="sourceLineNo">724</span>              Bytes.toBytes("b"), Bytes.toBytes("a"), Bytes.toBytes("c")<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      };<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      Append a = new Append(ROW);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      a.addColumn(FAMILY, QUALIFIERS[0], v1);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      a.addColumn(FAMILY, QUALIFIERS[1], v2);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      a.setReturnResults(false);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      assertEmptyResult(t.append(a));<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>      a = new Append(ROW);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      a.addColumn(FAMILY, QUALIFIERS[0], v2);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      a.addColumn(FAMILY, QUALIFIERS[1], v1);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      a.addColumn(FAMILY, QUALIFIERS[2], v2);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      Result r = t.append(a);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      assertEquals(0, Bytes.compareTo(Bytes.add(v1, v2), r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      assertEquals(0, Bytes.compareTo(Bytes.add(v2, v1), r.getValue(FAMILY, QUALIFIERS[1])));<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      // QUALIFIERS[2] previously not exist, verify both value and timestamp are correct<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      assertEquals(0, Bytes.compareTo(v2, r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      assertEquals(r.getColumnLatestCell(FAMILY, QUALIFIERS[0]).getTimestamp(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>              r.getColumnLatestCell(FAMILY, QUALIFIERS[2]).getTimestamp());<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>  private List&lt;Result&gt; doAppend(final boolean walUsed) throws IOException {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    LOG.info("Starting testAppend, walUsed is " + walUsed);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    final TableName TABLENAME =<a name="line.747"></a>
-<span class="sourceLineNo">748</span>            TableName.valueOf(walUsed ? "testAppendWithWAL" : "testAppendWithoutWAL");<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    try (Table t = TEST_UTIL.createTable(TABLENAME, FAMILY)) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      final byte[] row1 = Bytes.toBytes("c");<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      final byte[] row2 = Bytes.toBytes("b");<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      final byte[] row3 = Bytes.toBytes("a");<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      final byte[] qual = Bytes.toBytes("qual");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      Put put_0 = new Put(row2);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      put_0.addColumn(FAMILY, qual, Bytes.toBytes("put"));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      Put put_1 = new Put(row3);<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      put_1.addColumn(FAMILY, qual, Bytes.toBytes("put"));<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      Append append_0 = new Append(row1);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      append_0.addColumn(FAMILY, qual, Bytes.toBytes("i"));<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      Append append_1 = new Append(row1);<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      append_1.addColumn(FAMILY, qual, Bytes.toBytes("k"));<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      Append append_2 = new Append(row1);<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      append_2.addColumn(FAMILY, qual, Bytes.toBytes("e"));<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (!walUsed) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        append_2.setDurability(Durability.SKIP_WAL);<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      Append append_3 = new Append(row1);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      append_3.addColumn(FAMILY, qual, Bytes.toBytes("a"));<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      Scan s = new Scan();<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      s.setCaching(1);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      t.append(append_0);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      t.put(put_0);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      t.put(put_1);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      List&lt;Result&gt; results = new LinkedList&lt;&gt;();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      try (ResultScanner scanner = t.getScanner(s)) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        t.append(append_1);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        t.append(append_2);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        t.append(append_3);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        for (Result r : scanner) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>          results.add(r);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        }<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      TEST_UTIL.deleteTable(TABLENAME);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      return results;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @Test<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  public void testAppendWithoutWAL() throws Exception {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    List&lt;Result&gt; resultsWithWal = doAppend(true);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    List&lt;Result&gt; resultsWithoutWal = doAppend(false);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    assertEquals(resultsWithWal.size(), resultsWithoutWal.size());<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    for (int i = 0; i != resultsWithWal.size(); ++i) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      Result resultWithWal = resultsWithWal.get(i);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      Result resultWithoutWal = resultsWithoutWal.get(i);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      assertEquals(resultWithWal.rawCells().length, resultWithoutWal.rawCells().length);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      for (int j = 0; j != resultWithWal.rawCells().length; ++j) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>        Cell cellWithWal = resultWithWal.rawCells()[j];<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        Cell cellWithoutWal = resultWithoutWal.rawCells()[j];<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        assertArrayEquals(CellUtil.cloneRow(cellWithWal), CellUtil.cloneRow(cellWithoutWal));<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        assertArrayEquals(CellUtil.cloneFamily(cellWithWal), CellUtil.cloneFamily(cellWithoutWal));<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        assertArrayEquals(CellUtil.cloneQualifier(cellWithWal),<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          CellUtil.cloneQualifier(cellWithoutWal));<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        assertArrayEquals(CellUtil.cloneValue(cellWithWal), CellUtil.cloneValue(cellWithoutWal));<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      }<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><a name="line.808"></a>
-<span class="sourceLineNo">809</span>  @Test<a name="line.809"></a>
-<span class="sourceLineNo">810</span>  public void testClientPoolRoundRobin() throws IOException {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    final TableName tableName = name.getTableName();<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    int poolSize = 3;<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    int numVersions = poolSize * 2;<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    conf.set(HConstants.HBASE_CLIENT_IPC_POOL_TYPE, "round-robin");<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    conf.setInt(HConstants.HBASE_CLIENT_IPC_POOL_SIZE, poolSize);<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>    try (Table table =<a name="line.819"></a>
-<span class="sourceLineNo">820</span>                 TEST_UTIL.createTable(tableName, new byte[][] { FAMILY }, Integer.MAX_VALUE)) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>      final long ts = EnvironmentEdgeManager.currentTime();<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      Get get = new Get(ROW);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      get.readAllVersions();<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>      for (int versions = 1; versions &lt;= numVersions; versions++) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        Put put = new Put(ROW);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        put.addColumn(FAMILY, QUALIFIER, ts + versions, VALUE);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        table.put(put);<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>        Result result = table.get(get);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap().get(FAMILY)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>                .get(QUALIFIER);<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>        assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                + Bytes.toString(QUALIFIER) + " did not match", versions, navigableMap.size());<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          assertTrue("The value at time " + entry.getKey()<a name="line.839"></a>
-<span class="sourceLineNo">840</span>                          + " did not match what was put",<a name="line.840"></a>
-<span class="sourceLineNo">841</span>                  Bytes.equals(VALUE, entry.getValue()));<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>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>  }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span>  @Ignore ("Flakey: HBASE-8989") @Test<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  public void testClientPoolThreadLocal() throws IOException {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    final TableName tableName = name.getTableName();<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>    int poolSize = Integer.MAX_VALUE;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    int numVersions = 3;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    conf.set(HConstants.HBASE_CLIENT_IPC_POOL_TYPE, "thread-local");<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    conf.setInt(HConstants.HBASE_CLIENT_IPC_POOL_SIZE, poolSize);<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>    try (final Table table = TEST_UTIL.createTable(tableName, new byte[][] { FAMILY },  3)) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span>      final long ts = EnvironmentEdgeManager.currentTime();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      final Get get = new Get(ROW);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>      get.readAllVersions();<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>      for (int versions = 1; versions &lt;= numVersions; versions++) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        Put put = new Put(ROW);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>        put.addColumn(FAMILY, QUALIFIER, ts + versions, VALUE);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        table.put(put);<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span>        Result result = table.get(get);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap().get(FAMILY)<a name="line.870"></a>
-<span class="sourceLineNo">871</span>                .get(QUALIFIER);<a name="line.871"></a>
-<span class="sourceLineNo">872</span><a name="line.872"></a>
-<span class="sourceLineNo">873</span>        assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.873"></a>
-<span class="sourceLineNo">874</span>                + Bytes.toString(QUALIFIER) + " did not match", versions, navigableMap.size());<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          assertTrue("The value at time " + entry.getKey()<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                          + " did not match what was put",<a name="line.877"></a>
-<span class="sourceLineNo">878</span>                  Bytes.equals(VALUE, entry.getValue()));<a name="line.878"></a>
-<span class="sourceLineNo">879</span>        }<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      }<a name="line.880"></a>
-<span class="sourceLineNo">881</span><a name="line.881"></a>
-<span class="sourceLineNo">882</span>      final Object waitLock = new Object();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      ExecutorService executorService = Executors.newFixedThreadPool(numVersions);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      final AtomicReference&lt;AssertionError&gt; error = new AtomicReference&lt;&gt;(null);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      for (int versions = numVersions; versions &lt; numVersions * 2; versions++) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        final int versionsCopy = versions;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        executorService.submit((Callable&lt;Void&gt;) () -&gt; {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>          try {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>            Put put = new Put(ROW);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>            put.addColumn(FAMILY, QUALIFIER, ts + versionsCopy, VALUE);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>            table.put(put);<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>            Result result = table.get(get);<a name="line.893"></a>
-<span class="sourceLineNo">894</span>            NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap()<a name="line.894"></a>
-<span class="sourceLineNo">895</span>                    .get(FAMILY).get(QUALIFIER);<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>            assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.897"></a>
-<span class="sourceLineNo">898</span>                    + Bytes.toString(QUALIFIER) + " did not match " + versionsCopy, versionsCopy,<a name="line.898"></a>
-<span class="sourceLineNo">899</span>                    navigableMap.size());<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>              assertTrue("The value at time " + entry.getKey()<a name="line.901"></a>
-<span class="sourceLineNo">902</span>                              + " did not match what was put",<a name="line.902"></a>
-<span class="sourceLineNo">903</span>                      Bytes.equals(VALUE, entry.getValue()));<a name="line.903"></a>
-<span class="sourceLineNo">904</span>            }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>            synchronized (waitLock) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>              waitLock.wait();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>            }<a name="line.907"></a>
-<span class="sourceLineNo">908</span>          } catch (Exception ignored) {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>          } catch (AssertionError e) {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>            // the error happens in a thread, it won't fail the test,<a name="line.910"></a>
-<span class="sourceLineNo">911</span>            // need to pass it to the caller for proper handling.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>            error.set(e);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            LOG.error(e.toString(), e);<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>          return null;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>        });<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      synchronized (waitLock) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        waitLock.notifyAll();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      executorService.shutdownNow();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      assertNull(error.get());<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>  @Test<a name="line.927"></a>
-<span class="sourceLineNo">928</span>  public void testCheckAndPut() throws IOException {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    final byte [] anotherrow = Bytes.toBytes("anotherrow");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    final byte [] value2 = Bytes.toBytes("abcd");<a name="line.930"></a>
-<span class="sourceLineNo">931</span><a name="line.931"></a>
-<span class="sourceLineNo">932</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      Put put1 = new Put(ROW);<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      put1.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.934"></a>
-<span class="sourceLineNo">935</span><a name="line.935"></a>
-<span class="sourceLineNo">936</span>      // row doesn't exist, so using non-null value should be considered "not match".<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>              .ifEquals(VALUE).thenPut(put1);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      assertFalse(ok);<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>      // row doesn't exist, so using "ifNotExists" should be considered "match".<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put1);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      assertTrue(ok);<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>      // row now exists, so using "ifNotExists" should be considered "not match".<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put1);<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      assertFalse(ok);<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>      Put put2 = new Put(ROW);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>      // row now exists, use the matching value to check<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifEquals(VALUE).thenPut(put2);<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      assertTrue(ok);<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>      Put put3 = new Put(anotherrow);<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      put3.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>      // try to do CheckAndPut on different rows<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      try {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>        table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifEquals(value2).thenPut(put3);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        fail("trying to check and modify different rows should have failed.");<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      } catch (Exception ignored) {<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      }<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    }<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>  @Test<a name="line.968"></a>
-<span class="sourceLineNo">969</span>  public void testCheckAndMutateWithTimeRange() throws IOException {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.970"></a>
-<span class="sourceLineNo">971</span>      final long ts = EnvironmentEdgeManager.currentTime() / 2;<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      Put put = new Put(ROW);<a name="line.972"></a>
-<span class="sourceLineNo">973</span>      put.addColumn(FAMILY, QUALIFIER, ts, VALUE);<a name="line.973"></a>
-<span class="sourceLineNo">974</span><a name="line.974"></a>
-<span class="sourceLineNo">975</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.975"></a>
-<span class="sourceLineNo">976</span>              .ifNotExists()<a name="line.976"></a>
-<span class="sourceLineNo">977</span>              .thenPut(put);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      assertTrue(ok);<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.980"></a>
-<span class="sourceLineNo">981</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.981"></a>
-<span class="sourceLineNo">982</span>              .ifEquals(VALUE)<a name="line.982"></a>
-<span class="sourceLineNo">983</span>              .thenPut(put);<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      assertFalse(ok);<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.986"></a>
-<span class="sourceLineNo">987</span>              .timeRange(TimeRange.from(ts + 10000))<a name="line.987"></a>
-<span class="sourceLineNo">988</span>              .ifEquals(VALUE)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>              .thenPut(put);<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      assertFalse(ok);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.992"></a>
-<span class="sourceLineNo">993</span>              .timeRange(TimeRange.between(ts + 10000, ts + 20000))<a name="line.993"></a>
-<span class="sourceLineNo">994</span>              .ifEquals(VALUE)<a name="line.994"></a>
-<span class="sourceLineNo">995</span>              .thenPut(put);<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      assertFalse(ok);<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.998"></a>
-<span class="sourceLineNo">999</span>              .timeRange(TimeRange.until(ts))<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>              .ifEquals(VALUE)<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>              .thenPut(put);<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      assertFalse(ok);<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>              .timeRange(TimeRange.at(ts))<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>              .ifEquals(VALUE)<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>              .thenPut(put);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      assertTrue(ok);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>              .timeRange(TimeRange.from(ts))<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>              .ifEquals(VALUE)<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>              .thenPut(put);<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      assertTrue(ok);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span><a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>              .timeRange(TimeRange.between(ts, ts + 20000))<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>              .ifEquals(VALUE)<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>              .thenPut(put);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>      assertTrue(ok);<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>              .timeRange(TimeRange.until(ts + 10000))<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>              .ifEquals(VALUE)<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>              .thenPut(put);<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>      assertTrue(ok);<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>      RowMutations rm = new RowMutations(ROW)<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              .add((Mutation) put);<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              .ifEquals(VALUE)<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>              .thenMutate(rm);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      assertFalse(ok);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span><a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>              .timeRange(TimeRange.at(ts))<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              .ifEquals(VALUE)<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              .thenMutate(rm);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      assertTrue(ok);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span><a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      Delete delete = new Delete(ROW)<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>              .addColumn(FAMILY, QUALIFIER);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>              .ifEquals(VALUE)<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>              .thenDelete(delete);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      assertFalse(ok);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span><a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>              .timeRange(TimeRange.at(ts))<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>              .ifEquals(VALUE)<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>              .thenDelete(delete);<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>      assertTrue(ok);<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span><a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  @Test<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>  public void testCheckAndPutWithCompareOp() throws IOException {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    final byte [] value2 = Bytes.toBytes("bbbb");<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    final byte [] value3 = Bytes.toBytes("cccc");<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    final byte [] value4 = Bytes.toBytes("dddd");<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      Put put2 = new Put(ROW);<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      Put put3 = new Put(ROW);<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      put3.addColumn(FAMILY, QUALIFIER, value3);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      // row doesn't exist, so using "ifNotExists" should be considered "match".<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      boolean ok =<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>              table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put2);<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      assertTrue(ok);<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      // cell = "bbbb", using "aaaa" to compare only LESS/LESS_OR_EQUAL/NOT_EQUAL<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>      // turns out "match"<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>              .ifMatches(CompareOperator.GREATER, value1).thenPut(put2);<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      assertFalse(ok);<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>              .ifMatches(CompareOperator.EQUAL, value1).thenPut(put2);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      assertFalse(ok);<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value1).thenPut(put2);<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      assertFalse(ok);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              .ifMatches(CompareOperator.LESS, value1).thenPut(put2);<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      assertTrue(ok);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value1).thenPut(put2);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      assertTrue(ok);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>              .ifMatches(CompareOperator.NOT_EQUAL, value1).thenPut(put3);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      assertTrue(ok);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span><a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      // cell = "cccc", using "dddd" to compare only LARGER/LARGER_OR_EQUAL/NOT_EQUAL<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      // turns out "match"<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>              .ifMatches(CompareOperator.LESS, value4).thenPut(put3);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      assertFalse(ok);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value4).thenPut(put3);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>      assertFalse(ok);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>              .ifMatches(CompareOperator.EQUAL, value4).thenPut(put3);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      assertFalse(ok);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>              .ifMatches(CompareOperator.GREATER, value4).thenPut(put3);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      assertTrue(ok);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value4).thenPut(put3);<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      assertTrue(ok);<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>              .ifMatches(CompareOperator.NOT_EQUAL, value4).thenPut(put2);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      assertTrue(ok);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      // cell = "bbbb", using "bbbb" to compare only GREATER_OR_EQUAL/LESS_OR_EQUAL/EQUAL<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>      // turns out "match"<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>              .ifMatches(CompareOperator.GREATER, value2).thenPut(put2);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      assertFalse(ok);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>              .ifMatches(CompareOperator.NOT_EQUAL, value2).thenPut(put2);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      assertFalse(ok);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>              .ifMatches(CompareOperator.LESS, value2).thenPut(put2);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      assertFalse(ok);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value2).thenPut(put2);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      assertTrue(ok);<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value2).thenPut(put2);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      assertTrue(ok);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>              .ifMatches(CompareOperator.EQUAL, value2).thenPut(put3);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      assertTrue(ok);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    }<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>  @Test<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>  public void testCheckAndDelete() throws IOException {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span><a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(),<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        FAMILY)) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      Put put = new Put(ROW);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      put.addColumn(FAMILY, QUALIFIER, value1);<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      table.put(put);<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span><a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      Delete delete = new Delete(ROW);<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      delete.addColumns(FAMILY, QUALIFIER);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span><a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>              .ifEquals(value1).thenDelete(delete);<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      assertTrue(ok);<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  @Test<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>  public void testCheckAndDeleteWithCompareOp() throws IOException {<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    final byte [] value2 = Bytes.toBytes("bbbb");<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    final byte [] value3 = Bytes.toBytes("cccc");<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    final byte [] value4 = Bytes.toBytes("dddd");<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(),<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        FAMILY)) {<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      Put put2 = new Put(ROW);<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      table.put(put2);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      Put put3 = new Put(ROW);<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      put3.addColumn(FAMILY, QUALIFIER, value3);<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span><a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      Delete delete = new Delete(ROW);<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      delete.addColumns(FAMILY, QUALIFIER);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span><a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      // cell = "bbbb", using "aaaa" to compare only LESS/LESS_OR_EQUAL/NOT_EQUAL<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>      // turns out "match"<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>              .ifMatches(CompareOperator.GREATER, value1).thenDelete(delete);<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      assertFalse(ok);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>              .ifMatches(CompareOperator.EQUAL, value1).thenDelete(delete);<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      assertFalse(ok);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value1).thenDelete(delete);<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      assertFalse(ok);<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>              .ifMatches(CompareOperator.LESS, value1).thenDelete(delete);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      assertTrue(ok);<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      table.put(put2);<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value1).thenDelete(delete);<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>      assertTrue(ok);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>      table.put(put2);<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>              .ifMatches(CompareOperator.NOT_EQUAL, value1).thenDelete(delete);<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      assertTrue(ok);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span><a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // cell = "cccc", using "dddd" to compare only LARGER/LARGER_OR_EQUAL/NOT_EQUAL<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // turns out "match"<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      table.put(put3);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>              .ifMatches(CompareOperator.LESS, value4).thenDelete(delete);<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      assertFalse(ok);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value4).thenDelete(delete);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      assertFalse(ok);<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>              .ifMatches(CompareOperator.EQUAL, value4).thenDelete(delete);<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      assertFalse(ok);<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>              .ifMatches(CompareOperator.GREATER, value4).thenDelete(delete);<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      assertTrue(ok);<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      table.put(put3);<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value4).thenDelete(delete);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      assertTrue(ok);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      table.put(put3);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              .ifMatches(CompareOperator.NOT_EQUAL, value4).thenDelete(delete);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      assertTrue(ok);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span><a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      // cell = "bbbb", using "bbbb" to compare only GREATER_OR_EQUAL/LESS_OR_EQUAL/EQUAL<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      // turns out "match"<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      table.put(put2);<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>              .ifMatches(CompareOperator.GREATER, value2).thenDelete(delete);<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      assertFalse(ok);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>              .ifMatches(CompareOperator.NOT_EQUAL, value2).thenDelete(delete);<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      assertFalse(ok);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>              .ifMatches(CompareOperator.LESS, value2).thenDelete(delete);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>      assertFalse(ok);<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value2).thenDelete(delete);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      assertTrue(ok);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>      table.put(put2);<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value2).thenDelete(delete);<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      assertTrue(ok);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      table.put(put2);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>              .ifMatches(CompareOperator.EQUAL, value2).thenDelete(delete);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      assertTrue(ok);<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>  }<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span><a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>  /**<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  * Test ScanMetrics<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  */<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>  @Test<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  @SuppressWarnings({"unused", "checkstyle:EmptyBlock"})<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  public void testScanMetrics() throws Exception {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>    final TableName tableName = name.getTableName();<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span><a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    // Set up test table:<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    // Create table:<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    try (Table ht = TEST_UTIL.createMultiRegionTable(tableName, FAMILY)) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      int numOfRegions;<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>        numOfRegions = r.getStartKeys().length;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      // Create 3 rows in the table, with rowkeys starting with "zzz*" so that<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>      // scan are forced to hit all the regions.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>      Put put1 = new Put(Bytes.toBytes("zzz1"));<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      put1.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      Put put2 = new Put(Bytes.toBytes("zzz2"));<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>      put2.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      Put put3 = new Put(Bytes.toBytes("zzz3"));<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>      put3.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>      ht.put(Arrays.asList(put1, put2, put3));<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      Scan scan1 = new Scan();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>      int numRecords = 0;<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      try (ResultScanner scanner = ht.getScanner(scan1)) {<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>        for (Result result : scanner) {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>          numRecords++;<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        }<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span><a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>        LOG.info("test data has {} records.", numRecords);<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        // by default, scan metrics collection is turned off<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        assertNull(scanner.getScanMetrics());<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      // turn on scan metrics<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      Scan scan2 = new Scan();<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      scan2.setScanMetricsEnabled(true);<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      scan2.setCaching(numRecords + 1);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>        for (Result result : scanner.next(numRecords - 1)) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>        }<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>        assertNotNull(scanner.getScanMetrics());<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>      // set caching to 1, because metrics are collected in each roundtrip only<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      scan2 = new Scan();<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>      scan2.setScanMetricsEnabled(true);<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>      scan2.setCaching(1);<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>        // per HBASE-5717, this should still collect even if you don't run all the way to<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>        // the end of the scanner. So this is asking for 2 of the 3 rows we inserted.<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>        for (Result result : scanner.next(numRecords - 1)) {<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>        }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>        assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>          scanMetrics.countOfRegions.get());<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>      // check byte counters<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>      scan2 = new Scan();<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>      scan2.setScanMetricsEnabled(true);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      scan2.setCaching(1);<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        int numBytes = 0;<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        for (Result result : scanner) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          for (Cell cell : result.listCells()) {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            numBytes += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        assertEquals("Did not count the result bytes", numBytes,<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>          scanMetrics.countOfBytesInResults.get());<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      }<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span><a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      // check byte counters on a small scan<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      scan2 = new Scan();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>      scan2.setScanMetricsEnabled(true);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      scan2.setCaching(1);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>      scan2.setSmall(true);<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>        int numBytes = 0;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>        for (Result result : scanner) {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          for (Cell cell : result.listCells()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>            numBytes += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>          }<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>        }<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>        assertEquals("Did not count the result bytes", numBytes,<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>          scanMetrics.countOfBytesInResults.get());<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      }<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span><a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      // now, test that the metrics are still collected even if you don't call close, but do<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      // run past the end of all the records<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>      /** There seems to be a timing issue here.  Comment out for now. Fix when time.<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>       Scan scanWithoutClose = new Scan();<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>       scanWithoutClose.setCaching(1);<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>       scanWithoutClose.setScanMetricsEnabled(true);<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>       ResultScanner scannerWithoutClose = ht.getScanner(scanWithoutClose);<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>       for (Result result : scannerWithoutClose.next(numRecords + 1)) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>       }<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>       ScanMetrics scanMetricsWithoutClose = getScanMetrics(scanWithoutClose);<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>       assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>       scanMetricsWithoutClose.countOfRegions.get());<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>      // finally,<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      // test that the metrics are collected correctly if you both run past all the records,<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      // AND close the scanner<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>      Scan scanWithClose = new Scan();<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      // make sure we can set caching up to the number of a scanned values<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      scanWithClose.setCaching(numRecords);<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      scanWithClose.setScanMetricsEnabled(true);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      try (ResultScanner scannerWithClose = ht.getScanner(scanWithClose)) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        for (Result result : scannerWithClose.next(numRecords + 1)) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        scannerWithClose.close();<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>        ScanMetrics scanMetricsWithClose = scannerWithClose.getScanMetrics();<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>          scanMetricsWithClose.countOfRegions.get());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>    } finally {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      TEST_UTIL.deleteTable(tableName);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>    }<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>  /**<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   * Tests that cache on write works all the way up from the client-side.<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   *<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>   * Performs inserts, flushes, and compactions, verifying changes in the block<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>   * cache along the way.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>   */<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>  @Test<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  public void testCacheOnWriteEvictOnClose() throws Exception {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    final TableName tableName = name.getTableName();<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    byte [] data = Bytes.toBytes("data");<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>        // get the block cache and region<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        String regionName = locator.getAllRegionLocations().get(0).getRegion().getEncodedName();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span><a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        HRegion region = TEST_UTIL.getRSForFirstRegionInTable(tableName)<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>                .getRegion(regionName);<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        HStore store = region.getStores().iterator().next();<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>        CacheConfig cacheConf = store.getCacheConfig();<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>        cacheConf.setCacheDataOnWrite(true);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        cacheConf.setEvictOnClose(true);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        BlockCache cache = cacheConf.getBlockCache().get();<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // establish baseline stats<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        long startBlockCount = cache.getBlockCount();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        long startBlockHits = cache.getStats().getHitCount();<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        long startBlockMiss = cache.getStats().getMissCount();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        // wait till baseline is stable, (minimal 500 ms)<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        for (int i = 0; i &lt; 5; i++) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          Thread.sleep(100);<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>          if (startBlockCount != cache.getBlockCount()<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>                  || startBlockHits != cache.getStats().getHitCount()<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>                  || startBlockMiss != cache.getStats().getMissCount()) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>            startBlockCount = cache.getBlockCount();<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>            startBlockHits = cache.getStats().getHitCount();<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>            startBlockMiss = cache.getStats().getMissCount();<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            i = -1;<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>        }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span><a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        // insert data<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        Put put = new Put(ROW);<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        table.put(put);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>        assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        // data was in memstore so don't expect any changes<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        assertEquals(startBlockCount, cache.getBlockCount());<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        assertEquals(startBlockHits, cache.getStats().getHitCount());<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        assertEquals(startBlockMiss, cache.getStats().getMissCount());<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span><a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>        // flush the data<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        LOG.debug("Flushing cache");<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        region.flush(true);<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span><a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>        // expect two more blocks in cache - DATA and ROOT_INDEX<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>        // , no change in hits/misses<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        long expectedBlockCount = startBlockCount + 2;<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>        long expectedBlockHits = startBlockHits;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        long expectedBlockMiss = startBlockMiss;<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // read the data and expect same blocks, one new hit, no misses<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        assertEquals(++expectedBlockHits, cache.getStats().getHitCount());<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        // insert a second column, read the row, no new blocks, one new hit<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        byte[] data2 = Bytes.add(data, data);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        put = new Put(ROW);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        table.put(put);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        Result r = table.get(new Get(ROW));<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        assertEquals(++expectedBlockHits, cache.getStats().getHitCount());<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        // flush, one new block<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>        System.out.println("Flushing cache");<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        region.flush(true);<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // + 1 for Index Block, +1 for data block<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        expectedBlockCount += 2;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // compact, net minus two blocks, two hits, no misses<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        System.out.println("Compacting");<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        assertEquals(2, store.getStorefilesCount());<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>        store.triggerMajorCompaction();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        region.compact(true);<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        store.closeAndArchiveCompactedFiles();<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>        waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>        assertEquals(1, store.getStorefilesCount());<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // evicted two data blocks and two index blocks and compaction does not cache new blocks<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        expectedBlockCount = 0;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>        expectedBlockHits += 2;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>        // read the row, this should be a cache miss because we don't cache data<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        // blocks on compaction<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        r = table.get(new Get(ROW));<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        expectedBlockCount += 1; // cached one data block<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        assertEquals(++expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span><a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>  private void waitForStoreFileCount(HStore store, int count, int timeout)<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      throws InterruptedException {<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    while (start + timeout &gt; EnvironmentEdgeManager.currentTime() &amp;&amp;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        store.getStorefilesCount() != count) {<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      Thread.sleep(100);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    System.out.println("start=" + start + ", now=" + EnvironmentEdgeManager.currentTime() +<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      ", cur=" + store.getStorefilesCount());<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>  }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span><a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>  /**<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>   * Tests the non cached version of getRegionLocator by moving a region.<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>   */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  @Test<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>  public void testNonCachedGetRegionLocation() throws Exception {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    // Test Initialization.<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    final TableName tableName = name.getTableName();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    byte [] family1 = Bytes.toBytes("f1");<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    byte [] family2 = Bytes.toBytes("f2");<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    try (Table ignored = TEST_UTIL.createTable(tableName, new byte[][] {family1, family2}, 10);<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>        Admin admin = TEST_UTIL.getAdmin();<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>        RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;HRegionLocation&gt; allRegionLocations = locator.getAllRegionLocations();<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      assertEquals(1, allRegionLocations.size());<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      RegionInfo regionInfo = allRegionLocations.get(0).getRegion();<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      ServerName addrBefore = allRegionLocations.get(0).getServerName();<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      // Verify region location before move.<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      HRegionLocation addrCache = locator.getRegionLocation(regionInfo.getStartKey(), false);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      HRegionLocation addrNoCache = locator.getRegionLocation(regionInfo.getStartKey(),  true);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      assertEquals(addrBefore.getPort(), addrCache.getPort());<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      assertEquals(addrBefore.getPort(), addrNoCache.getPort());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.filter.InclusiveStopFilter;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.filter.KeyOnlyFilter;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.filter.RegexStringComparator;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.filter.RowFilter;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.filter.SubstringComparator;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.filter.ValueFilter;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.TimeRange;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.junit.AfterClass;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.junit.ClassRule;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.junit.Ignore;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.junit.Rule;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.junit.Test;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.junit.experimental.categories.Category;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.junit.runner.RunWith;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.junit.runners.Parameterized;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.slf4j.Logger;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.slf4j.LoggerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MultiRowMutationService;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MutateRowsRequest;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MultiRowMutationProtos.MutateRowsResponse;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>/**<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * Run tests that use the HBase clients; {@link Table}.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * Sets up the HBase mini cluster once at start and runs through all client tests.<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * Each creates a table named for the method and does its stuff against that.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * Parameterized to run with different registry implementations.<a name="line.109"></a>
+<span class="sourceLineNo">110</span> */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>@Category({LargeTests.class, ClientTests.class})<a name="line.111"></a>
+<span class="sourceLineNo">112</span>@SuppressWarnings ("deprecation")<a name="line.112"></a>
+<span class="sourceLineNo">113</span>@RunWith(Parameterized.class)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>public class TestFromClientSide5 extends FromClientSideBase {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  private static final Logger LOG = LoggerFactory.getLogger(TestFromClientSide5.class);<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  @ClassRule<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      HBaseClassTestRule.forClass(TestFromClientSide5.class);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Rule<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  // To keep the child classes happy.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  TestFromClientSide5() {}<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public TestFromClientSide5(Class registry, int numHedgedReqs) throws Exception {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    initialize(registry, numHedgedReqs, MultiRowMutationEndpoint.class);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Parameterized.Parameters<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static Collection parameters() {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return Arrays.asList(new Object[][] {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        { MasterRegistry.class, 1},<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        { MasterRegistry.class, 2},<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        { ZKConnectionRegistry.class, 1}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    });<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @AfterClass public static void tearDownAfterClass() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    afterClass();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  @Test<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public void testGetClosestRowBefore() throws IOException, InterruptedException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    final TableName tableName = name.getTableName();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    final byte[] firstRow = Bytes.toBytes("row111");<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final byte[] secondRow = Bytes.toBytes("row222");<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    final byte[] thirdRow = Bytes.toBytes("row333");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    final byte[] forthRow = Bytes.toBytes("row444");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    final byte[] beforeFirstRow = Bytes.toBytes("row");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    final byte[] beforeSecondRow = Bytes.toBytes("row22");<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    final byte[] beforeThirdRow = Bytes.toBytes("row33");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    final byte[] beforeForthRow = Bytes.toBytes("row44");<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    try (Table table =<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        TEST_UTIL.createTable(tableName,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          new byte[][] { HConstants.CATALOG_FAMILY, Bytes.toBytes("info2") }, 1, 1024);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>      // set block size to 64 to making 2 kvs into one block, bypassing the walkForwardInSingleRow<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      // in Store.rowAtOrBeforeFromStoreFile<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      String regionName = locator.getAllRegionLocations().get(0).getRegion().getEncodedName();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      HRegion region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getRegion(regionName);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      Put put1 = new Put(firstRow);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      Put put2 = new Put(secondRow);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      Put put3 = new Put(thirdRow);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Put put4 = new Put(forthRow);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      byte[] one = new byte[] { 1 };<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      byte[] two = new byte[] { 2 };<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      byte[] three = new byte[] { 3 };<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      byte[] four = new byte[] { 4 };<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>      put1.addColumn(HConstants.CATALOG_FAMILY, null, one);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      put2.addColumn(HConstants.CATALOG_FAMILY, null, two);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      put3.addColumn(HConstants.CATALOG_FAMILY, null, three);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      put4.addColumn(HConstants.CATALOG_FAMILY, null, four);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      table.put(put1);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      table.put(put2);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      table.put(put3);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      table.put(put4);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      region.flush(true);<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>      Result result;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      // Test before first that null is returned<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      result = getReverseScanResult(table, beforeFirstRow);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      assertNull(result);<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Test at first that first is returned<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      result = getReverseScanResult(table, firstRow);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      assertTrue(Bytes.equals(result.getRow(), firstRow));<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one));<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>      // Test in between first and second that first is returned<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      result = getReverseScanResult(table, beforeSecondRow);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(Bytes.equals(result.getRow(), firstRow));<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>      // Test at second make sure second is returned<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      result = getReverseScanResult(table, secondRow);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      assertTrue(Bytes.equals(result.getRow(), secondRow));<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two));<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // Test in second and third, make sure second is returned<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      result = getReverseScanResult(table, beforeThirdRow);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      assertTrue(Bytes.equals(result.getRow(), secondRow));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two));<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Test at third make sure third is returned<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      result = getReverseScanResult(table, thirdRow);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      assertTrue(Bytes.equals(result.getRow(), thirdRow));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three));<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>      // Test in third and forth, make sure third is returned<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      result = getReverseScanResult(table, beforeForthRow);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      assertTrue(Bytes.equals(result.getRow(), thirdRow));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three));<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // Test at forth make sure forth is returned<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      result = getReverseScanResult(table, forthRow);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      assertTrue(Bytes.equals(result.getRow(), forthRow));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four));<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>      // Test after forth make sure forth is returned<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      result = getReverseScanResult(table, Bytes.add(forthRow, one));<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      assertTrue(Bytes.equals(result.getRow(), forthRow));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four));<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><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private Result getReverseScanResult(Table table, byte[] row) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    Scan scan = new Scan().withStartRow(row);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    scan.setReadType(ReadType.PREAD);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    scan.setReversed(true);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    scan.setCaching(1);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      return scanner.next();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * For HBASE-2156<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  @Test<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public void testScanVariableReuse() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    Scan scan = new Scan();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    scan.addFamily(FAMILY);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    scan.addColumn(FAMILY, ROW);<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertEquals(1, scan.getFamilyMap().get(FAMILY).size());<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>    scan = new Scan();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    scan.addFamily(FAMILY);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    assertNull(scan.getFamilyMap().get(FAMILY));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    assertTrue(scan.getFamilyMap().containsKey(FAMILY));<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>  @Test<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public void testMultiRowMutation() throws Exception {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    LOG.info("Starting testMultiRowMutation");<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    final TableName tableName = name.getTableName();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    final byte [] ROW3 = Bytes.toBytes("testRow3");<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      // Add initial data<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      t.batch(Arrays.asList(<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE),<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        new Put(ROW2).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(1L)),<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        new Put(ROW3).addColumn(FAMILY, QUALIFIER, VALUE)<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      ), new Object[3]);<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>      // Execute MultiRowMutation<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      Put put = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put);<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>      Delete delete = new Delete(ROW1);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>      Increment increment = new Increment(ROW2).addColumn(FAMILY, QUALIFIER, 1L);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.INCREMENT, increment);<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>      Append append = new Append(ROW3).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      MutationProto m4 = ProtobufUtil.toMutation(MutationType.APPEND, append);<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      mrmBuilder.addMutationRequest(m1);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      mrmBuilder.addMutationRequest(m2);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      mrmBuilder.addMutationRequest(m3);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      mrmBuilder.addMutationRequest(m4);<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      MultiRowMutationService.BlockingInterface service =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              MultiRowMutationService.newBlockingStub(channel);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Assert<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      assertTrue(response.getProcessed());<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>      Result r = t.get(new Get(ROW));<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      r = t.get(new Get(ROW1));<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      assertTrue(r.isEmpty());<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      r = t.get(new Get(ROW2));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      assertEquals(2L, Bytes.toLong(r.getValue(FAMILY, QUALIFIER)));<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>      r = t.get(new Get(ROW3));<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      assertEquals(Bytes.toString(VALUE) + Bytes.toString(VALUE),<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<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>  @Test<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public void testMultiRowMutationWithSingleConditionWhenConditionMatches() throws Exception {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    final TableName tableName = name.getTableName();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      // Add initial data<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // Execute MultiRowMutation with conditions<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      Delete delete = new Delete(ROW2);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      mrmBuilder.addMutationRequest(m1);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      mrmBuilder.addMutationRequest(m2);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      mrmBuilder.addMutationRequest(m3);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        CompareOperator.EQUAL, VALUE2, null));<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      MultiRowMutationService.BlockingInterface service =<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>      // Assert<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      assertTrue(response.getProcessed());<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>      Result r = t.get(new Get(ROW));<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>      r = t.get(new Get(ROW1));<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>      r = t.get(new Get(ROW2));<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      assertTrue(r.isEmpty());<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Test<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public void testMultiRowMutationWithSingleConditionWhenConditionNotMatch() throws Exception {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    final TableName tableName = name.getTableName();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      // Add initial data<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>      // Execute MultiRowMutation with conditions<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      Delete delete = new Delete(ROW2);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      mrmBuilder.addMutationRequest(m1);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      mrmBuilder.addMutationRequest(m2);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      mrmBuilder.addMutationRequest(m3);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        CompareOperator.EQUAL, VALUE1, null));<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      MultiRowMutationService.BlockingInterface service =<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>      // Assert<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      assertFalse(response.getProcessed());<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>      Result r = t.get(new Get(ROW));<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      assertTrue(r.isEmpty());<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>      r = t.get(new Get(ROW1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      assertTrue(r.isEmpty());<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>      r = t.get(new Get(ROW2));<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testMultiRowMutationWithMultipleConditionsWhenConditionsMatch() throws Exception {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    final TableName tableName = name.getTableName();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      // Add initial data<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>      // Execute MultiRowMutation with conditions<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      Delete delete = new Delete(ROW2);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      mrmBuilder.addMutationRequest(m1);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      mrmBuilder.addMutationRequest(m2);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      mrmBuilder.addMutationRequest(m3);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW, FAMILY, QUALIFIER,<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        CompareOperator.EQUAL, null, null));<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        CompareOperator.EQUAL, VALUE2, null));<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      MultiRowMutationService.BlockingInterface service =<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // Assert<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      assertTrue(response.getProcessed());<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>      Result r = t.get(new Get(ROW));<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>      r = t.get(new Get(ROW1));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>      r = t.get(new Get(ROW2));<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      assertTrue(r.isEmpty());<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  @Test<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public void testMultiRowMutationWithMultipleConditionsWhenConditionsNotMatch() throws Exception {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    final TableName tableName = name.getTableName();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Add initial data<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2));<a name="line.476"></a>
+<span class="sourceLineNo">477</span><a name="line.477"></a>
+<span class="sourceLineNo">478</span>      // Execute MultiRowMutation with conditions<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      Delete delete = new Delete(ROW2);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.484"></a>
+<span class="sourceLineNo">485</span><a name="line.485"></a>
+<span class="sourceLineNo">486</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      mrmBuilder.addMutationRequest(m1);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      mrmBuilder.addMutationRequest(m2);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      mrmBuilder.addMutationRequest(m3);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW1, FAMILY, QUALIFIER,<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        CompareOperator.EQUAL, null, null));<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, FAMILY, QUALIFIER,<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        CompareOperator.EQUAL, VALUE1, null));<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      MultiRowMutationService.BlockingInterface service =<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>      // Assert<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      assertFalse(response.getProcessed());<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span>      Result r = t.get(new Get(ROW));<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      assertTrue(r.isEmpty());<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span>      r = t.get(new Get(ROW1));<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      assertTrue(r.isEmpty());<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>      r = t.get(new Get(ROW2));<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>  @Test<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  public void testMultiRowMutationWithFilterConditionWhenConditionMatches() throws Exception {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    final TableName tableName = name.getTableName();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    final byte [] QUALIFIER2 = Bytes.toBytes("testQualifier2");<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    final byte [] VALUE3 = Bytes.toBytes("testValue3");<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      // Add initial data<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2)<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        .addColumn(FAMILY, QUALIFIER2, VALUE3));<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>      // Execute MultiRowMutation with conditions<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.533"></a>
+<span class="sourceLineNo">534</span>      Delete delete = new Delete(ROW2);<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      mrmBuilder.addMutationRequest(m1);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      mrmBuilder.addMutationRequest(m2);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      mrmBuilder.addMutationRequest(m3);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, new FilterList(<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER, CompareOperator.EQUAL, VALUE2),<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER2, CompareOperator.EQUAL, VALUE3)), null));<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      MultiRowMutationService.BlockingInterface service =<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>      // Assert<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      assertTrue(response.getProcessed());<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>      Result r = t.get(new Get(ROW));<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      assertEquals(Bytes.toString(VALUE), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>      r = t.get(new Get(ROW1));<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      assertEquals(Bytes.toString(VALUE1), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>      r = t.get(new Get(ROW2));<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      assertTrue(r.isEmpty());<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span>  @Test<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  public void testMultiRowMutationWithFilterConditionWhenConditionNotMatch() throws Exception {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    final TableName tableName = name.getTableName();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    final byte [] ROW1 = Bytes.toBytes("testRow1");<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    final byte [] ROW2 = Bytes.toBytes("testRow2");<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    final byte [] QUALIFIER2 = Bytes.toBytes("testQualifier2");<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    final byte [] VALUE1 = Bytes.toBytes("testValue1");<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    final byte [] VALUE2 = Bytes.toBytes("testValue2");<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    final byte [] VALUE3 = Bytes.toBytes("testValue3");<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      // Add initial data<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      t.put(new Put(ROW2).addColumn(FAMILY, QUALIFIER, VALUE2)<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        .addColumn(FAMILY, QUALIFIER2, VALUE3));<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>      // Execute MultiRowMutation with conditions<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      Put put1 = new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      MutationProto m1 = ProtobufUtil.toMutation(MutationType.PUT, put1);<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      Put put2 = new Put(ROW1).addColumn(FAMILY, QUALIFIER, VALUE1);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      MutationProto m2 = ProtobufUtil.toMutation(MutationType.PUT, put2);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      Delete delete = new Delete(ROW2);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      MutationProto m3 = ProtobufUtil.toMutation(MutationType.DELETE, delete);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>      MutateRowsRequest.Builder mrmBuilder = MutateRowsRequest.newBuilder();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      mrmBuilder.addMutationRequest(m1);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      mrmBuilder.addMutationRequest(m2);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      mrmBuilder.addMutationRequest(m3);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      mrmBuilder.addCondition(ProtobufUtil.toCondition(ROW2, new FilterList(<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER, CompareOperator.EQUAL, VALUE2),<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        new SingleColumnValueFilter(FAMILY, QUALIFIER2, CompareOperator.EQUAL, VALUE2)), null));<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      CoprocessorRpcChannel channel = t.coprocessorService(ROW);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      MultiRowMutationService.BlockingInterface service =<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        MultiRowMutationService.newBlockingStub(channel);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      MutateRowsResponse response = service.mutateRows(null, mrmBuilder.build());<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>      // Assert<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      assertFalse(response.getProcessed());<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      Result r = t.get(new Get(ROW));<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      assertTrue(r.isEmpty());<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>      r = t.get(new Get(ROW1));<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      assertTrue(r.isEmpty());<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      r = t.get(new Get(ROW2));<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      assertEquals(Bytes.toString(VALUE2), Bytes.toString(r.getValue(FAMILY, QUALIFIER)));<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>  @Test<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  public void testRowMutations() throws Exception {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    LOG.info("Starting testRowMutations");<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    final TableName tableName = name.getTableName();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      byte[][] QUALIFIERS = new byte[][] { Bytes.toBytes("a"), Bytes.toBytes("b"),<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        Bytes.toBytes("c"), Bytes.toBytes("d") };<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // Test for Put operations<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      RowMutations arm = new RowMutations(ROW);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      Put p = new Put(ROW);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      p.addColumn(FAMILY, QUALIFIERS[0], VALUE);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      arm.add(p);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      Result r = t.mutateRow(arm);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      assertTrue(r.getExists());<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      assertTrue(r.isEmpty());<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      Get g = new Get(ROW);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      r = t.get(g);<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Test for Put and Delete operations<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      arm = new RowMutations(ROW);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      p = new Put(ROW);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      p.addColumn(FAMILY, QUALIFIERS[1], VALUE);<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      arm.add(p);<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      Delete d = new Delete(ROW);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      d.addColumns(FAMILY, QUALIFIERS[0]);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      arm.add(d);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      // TODO: Trying mutateRow again. The batch was failing with a one try only.<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      r = t.mutateRow(arm);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      assertTrue(r.getExists());<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      assertTrue(r.isEmpty());<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>      r = t.get(g);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[1])));<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      assertNull(r.getValue(FAMILY, QUALIFIERS[0]));<a name="line.650"></a>
+<span class="sourceLineNo">651</span><a name="line.651"></a>
+<span class="sourceLineNo">652</span>      // Test for Increment and Append operations<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      arm = new RowMutations(ROW);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      arm.add(Arrays.asList(<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        new Put(ROW).addColumn(FAMILY, QUALIFIERS[0], VALUE),<a name="line.655"></a>
+<span class="sourceLineNo">656</span>        new Delete(ROW).addColumns(FAMILY, QUALIFIERS[1]),<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        new Increment(ROW).addColumn(FAMILY, QUALIFIERS[2], 5L),<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        new Append(ROW).addColumn(FAMILY, QUALIFIERS[3], Bytes.toBytes("abc"))<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      ));<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      r = t.mutateRow(arm);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      assertTrue(r.getExists());<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      assertEquals(5L, Bytes.toLong(r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      assertEquals("abc", Bytes.toString(r.getValue(FAMILY, QUALIFIERS[3])));<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      g = new Get(ROW);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      r = t.get(g);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      assertEquals(0, Bytes.compareTo(VALUE, r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      assertNull(r.getValue(FAMILY, QUALIFIERS[1]));<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      assertEquals(5L, Bytes.toLong(r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      assertEquals("abc", Bytes.toString(r.getValue(FAMILY, QUALIFIERS[3])));<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>      // Test that we get a region level exception<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        arm = new RowMutations(ROW);<a name="line.674"></a>
+<span class="sourceLineNo">675</span>        p = new Put(ROW);<a name="line.675"></a>
+<span class="sourceLineNo">676</span>        p.addColumn(new byte[] { 'b', 'o', 'g', 'u', 's' }, QUALIFIERS[0], VALUE);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        arm.add(p);<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        t.mutateRow(arm);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        fail("Expected NoSuchColumnFamilyException");<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      } catch (NoSuchColumnFamilyException e) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        return;<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      } catch (RetriesExhaustedWithDetailsException e) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>        for (Throwable rootCause : e.getCauses()) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          if (rootCause instanceof NoSuchColumnFamilyException) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            return;<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        }<a name="line.687"></a>
+<span class="sourceLineNo">688</span>        throw e;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>  @Test<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  public void testBatchAppendWithReturnResultFalse() throws Exception {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    LOG.info("Starting testBatchAppendWithReturnResultFalse");<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    final TableName tableName = name.getTableName();<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      Append append1 = new Append(Bytes.toBytes("row1"));<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      append1.setReturnResults(false);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      append1.addColumn(FAMILY, Bytes.toBytes("f1"), Bytes.toBytes("value1"));<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Append append2 = new Append(Bytes.toBytes("row1"));<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      append2.setReturnResults(false);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      append2.addColumn(FAMILY, Bytes.toBytes("f1"), Bytes.toBytes("value2"));<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      List&lt;Append&gt; appends = new ArrayList&lt;&gt;();<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      appends.add(append1);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      appends.add(append2);<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      Object[] results = new Object[2];<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      table.batch(appends, results);<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      assertEquals(2, results.length);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      for (Object r : results) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        Result result = (Result) r;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        assertTrue(result.isEmpty());<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>  @Test<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public void testAppend() throws Exception {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    LOG.info("Starting testAppend");<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    final TableName tableName = name.getTableName();<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    try (Table t = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      byte[] v1 = Bytes.toBytes("42");<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      byte[] v2 = Bytes.toBytes("23");<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      byte[][] QUALIFIERS = new byte[][]{<a name="line.724"></a>
+<span class="sourceLineNo">725</span>              Bytes.toBytes("b"), Bytes.toBytes("a"), Bytes.toBytes("c")<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      };<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      Append a = new Append(ROW);<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      a.addColumn(FAMILY, QUALIFIERS[0], v1);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      a.addColumn(FAMILY, QUALIFIERS[1], v2);<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      a.setReturnResults(false);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      assertEmptyResult(t.append(a));<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>      a = new Append(ROW);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      a.addColumn(FAMILY, QUALIFIERS[0], v2);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      a.addColumn(FAMILY, QUALIFIERS[1], v1);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      a.addColumn(FAMILY, QUALIFIERS[2], v2);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      Result r = t.append(a);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      assertEquals(0, Bytes.compareTo(Bytes.add(v1, v2), r.getValue(FAMILY, QUALIFIERS[0])));<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      assertEquals(0, Bytes.compareTo(Bytes.add(v2, v1), r.getValue(FAMILY, QUALIFIERS[1])));<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      // QUALIFIERS[2] previously not exist, verify both value and timestamp are correct<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      assertEquals(0, Bytes.compareTo(v2, r.getValue(FAMILY, QUALIFIERS[2])));<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      assertEquals(r.getColumnLatestCell(FAMILY, QUALIFIERS[0]).getTimestamp(),<a name="line.742"></a>
+<span class="sourceLineNo">743</span>              r.getColumnLatestCell(FAMILY, QUALIFIERS[2]).getTimestamp());<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>  private List&lt;Result&gt; doAppend(final boolean walUsed) throws IOException {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    LOG.info("Starting testAppend, walUsed is " + walUsed);<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    final TableName TABLENAME =<a name="line.748"></a>
+<span class="sourceLineNo">749</span>            TableName.valueOf(walUsed ? "testAppendWithWAL" : "testAppendWithoutWAL");<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    try (Table t = TEST_UTIL.createTable(TABLENAME, FAMILY)) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      final byte[] row1 = Bytes.toBytes("c");<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      final byte[] row2 = Bytes.toBytes("b");<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      final byte[] row3 = Bytes.toBytes("a");<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      final byte[] qual = Bytes.toBytes("qual");<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      Put put_0 = new Put(row2);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      put_0.addColumn(FAMILY, qual, Bytes.toBytes("put"));<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      Put put_1 = new Put(row3);<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      put_1.addColumn(FAMILY, qual, Bytes.toBytes("put"));<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      Append append_0 = new Append(row1);<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      append_0.addColumn(FAMILY, qual, Bytes.toBytes("i"));<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      Append append_1 = new Append(row1);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      append_1.addColumn(FAMILY, qual, Bytes.toBytes("k"));<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      Append append_2 = new Append(row1);<a name="line.763"></a>
+<span class="sourceLineNo">764</span>      append_2.addColumn(FAMILY, qual, Bytes.toBytes("e"));<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      if (!walUsed) {<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        append_2.setDurability(Durability.SKIP_WAL);<a name="line.766"></a>
+<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      Append append_3 = new Append(row1);<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      append_3.addColumn(FAMILY, qual, Bytes.toBytes("a"));<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      Scan s = new Scan();<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      s.setCaching(1);<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      t.append(append_0);<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      t.put(put_0);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      t.put(put_1);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      List&lt;Result&gt; results = new LinkedList&lt;&gt;();<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      try (ResultScanner scanner = t.getScanner(s)) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        t.append(append_1);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        t.append(append_2);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        t.append(append_3);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        for (Result r : scanner) {<a name="line.780"></a>
+<span class="sourceLineNo">781</span>          results.add(r);<a name="line.781"></a>
+<span class="sourceLineNo">782</span>        }<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      }<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      TEST_UTIL.deleteTable(TABLENAME);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      return results;<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
+<span class="sourceLineNo">787</span>  }<a name="line.787"></a>
+<span class="sourceLineNo">788</span><a name="line.788"></a>
+<span class="sourceLineNo">789</span>  @Test<a name="line.789"></a>
+<span class="sourceLineNo">790</span>  public void testAppendWithoutWAL() throws Exception {<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    List&lt;Result&gt; resultsWithWal = doAppend(true);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    List&lt;Result&gt; resultsWithoutWal = doAppend(false);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    assertEquals(resultsWithWal.size(), resultsWithoutWal.size());<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    for (int i = 0; i != resultsWithWal.size(); ++i) {<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      Result resultWithWal = resultsWithWal.get(i);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      Result resultWithoutWal = resultsWithoutWal.get(i);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      assertEquals(resultWithWal.rawCells().length, resultWithoutWal.rawCells().length);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      for (int j = 0; j != resultWithWal.rawCells().length; ++j) {<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        Cell cellWithWal = resultWithWal.rawCells()[j];<a name="line.799"></a>
+<span class="sourceLineNo">800</span>        Cell cellWithoutWal = resultWithoutWal.rawCells()[j];<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        assertArrayEquals(CellUtil.cloneRow(cellWithWal), CellUtil.cloneRow(cellWithoutWal));<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        assertArrayEquals(CellUtil.cloneFamily(cellWithWal), CellUtil.cloneFamily(cellWithoutWal));<a name="line.802"></a>
+<span class="sourceLineNo">803</span>        assertArrayEquals(CellUtil.cloneQualifier(cellWithWal),<a name="line.803"></a>
+<span class="sourceLineNo">804</span>          CellUtil.cloneQualifier(cellWithoutWal));<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        assertArrayEquals(CellUtil.cloneValue(cellWithWal), CellUtil.cloneValue(cellWithoutWal));<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>  }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span>  @Test<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  public void testClientPoolRoundRobin() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    final TableName tableName = name.getTableName();<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>    int poolSize = 3;<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    int numVersions = poolSize * 2;<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    conf.set(HConstants.HBASE_CLIENT_IPC_POOL_TYPE, "round-robin");<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    conf.setInt(HConstants.HBASE_CLIENT_IPC_POOL_SIZE, poolSize);<a name="line.818"></a>
+<span class="sourceLineNo">819</span><a name="line.819"></a>
+<span class="sourceLineNo">820</span>    try (Table table =<a name="line.820"></a>
+<span class="sourceLineNo">821</span>                 TEST_UTIL.createTable(tableName, new byte[][] { FAMILY }, Integer.MAX_VALUE)) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span>      final long ts = EnvironmentEdgeManager.currentTime();<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      Get get = new Get(ROW);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      get.readAllVersions();<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>      for (int versions = 1; versions &lt;= numVersions; versions++) {<a name="line.828"></a>
+<span class="sourceLineNo">829</span>        Put put = new Put(ROW);<a name="line.829"></a>
+<span class="sourceLineNo">830</span>        put.addColumn(FAMILY, QUALIFIER, ts + versions, VALUE);<a name="line.830"></a>
+<span class="sourceLineNo">831</span>        table.put(put);<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span>        Result result = table.get(get);<a name="line.833"></a>
+<span class="sourceLineNo">834</span>        NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap().get(FAMILY)<a name="line.834"></a>
+<span class="sourceLineNo">835</span>                .get(QUALIFIER);<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>        assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                + Bytes.toString(QUALIFIER) + " did not match", versions, navigableMap.size());<a name="line.838"></a>
+<span class="sourceLineNo">839</span>        for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          assertTrue("The value at time " + entry.getKey()<a name="line.840"></a>
+<span class="sourceLineNo">841</span>                          + " did not match what was put",<a name="line.841"></a>
+<span class="sourceLineNo">842</span>                  Bytes.equals(VALUE, entry.getValue()));<a name="line.842"></a>
+<span class="sourceLineNo">843</span>        }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      }<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    }<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>  @Ignore ("Flakey: HBASE-8989") @Test<a name="line.848"></a>
+<span class="sourceLineNo">849</span>  public void testClientPoolThreadLocal() throws IOException {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    final TableName tableName = name.getTableName();<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    int poolSize = Integer.MAX_VALUE;<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    int numVersions = 3;<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    conf.set(HConstants.HBASE_CLIENT_IPC_POOL_TYPE, "thread-local");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    conf.setInt(HConstants.HBASE_CLIENT_IPC_POOL_SIZE, poolSize);<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>    try (final Table table = TEST_UTIL.createTable(tableName, new byte[][] { FAMILY },  3)) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>      final long ts = EnvironmentEdgeManager.currentTime();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>      final Get get = new Get(ROW);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      get.readAllVersions();<a name="line.863"></a>
+<span class="sourceLineNo">864</span><a name="line.864"></a>
+<span class="sourceLineNo">865</span>      for (int versions = 1; versions &lt;= numVersions; versions++) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        Put put = new Put(ROW);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>        put.addColumn(FAMILY, QUALIFIER, ts + versions, VALUE);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>        table.put(put);<a name="line.868"></a>
+<span class="sourceLineNo">869</span><a name="line.869"></a>
+<span class="sourceLineNo">870</span>        Result result = table.get(get);<a name="line.870"></a>
+<span class="sourceLineNo">871</span>        NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap().get(FAMILY)<a name="line.871"></a>
+<span class="sourceLineNo">872</span>                .get(QUALIFIER);<a name="line.872"></a>
+<span class="sourceLineNo">873</span><a name="line.873"></a>
+<span class="sourceLineNo">874</span>        assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.874"></a>
+<span class="sourceLineNo">875</span>                + Bytes.toString(QUALIFIER) + " did not match", versions, navigableMap.size());<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>          assertTrue("The value at time " + entry.getKey()<a name="line.877"></a>
+<span class="sourceLineNo">878</span>                          + " did not match what was put",<a name="line.878"></a>
+<span class="sourceLineNo">879</span>                  Bytes.equals(VALUE, entry.getValue()));<a name="line.879"></a>
+<span class="sourceLineNo">880</span>        }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>      }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>      final Object waitLock = new Object();<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      ExecutorService executorService = Executors.newFixedThreadPool(numVersions);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>      final AtomicReference&lt;AssertionError&gt; error = new AtomicReference&lt;&gt;(null);<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      for (int versions = numVersions; versions &lt; numVersions * 2; versions++) {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        final int versionsCopy = versions;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>        executorService.submit((Callable&lt;Void&gt;) () -&gt; {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>          try {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>            Put put = new Put(ROW);<a name="line.890"></a>
+<span class="sourceLineNo">891</span>            put.addColumn(FAMILY, QUALIFIER, ts + versionsCopy, VALUE);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>            table.put(put);<a name="line.892"></a>
+<span class="sourceLineNo">893</span><a name="line.893"></a>
+<span class="sourceLineNo">894</span>            Result result = table.get(get);<a name="line.894"></a>
+<span class="sourceLineNo">895</span>            NavigableMap&lt;Long, byte[]&gt; navigableMap = result.getMap()<a name="line.895"></a>
+<span class="sourceLineNo">896</span>                    .get(FAMILY).get(QUALIFIER);<a name="line.896"></a>
+<span class="sourceLineNo">897</span><a name="line.897"></a>
+<span class="sourceLineNo">898</span>            assertEquals("The number of versions of '" + Bytes.toString(FAMILY) + ":"<a name="line.898"></a>
+<span class="sourceLineNo">899</span>                    + Bytes.toString(QUALIFIER) + " did not match " + versionsCopy, versionsCopy,<a name="line.899"></a>
+<span class="sourceLineNo">900</span>                    navigableMap.size());<a name="line.900"></a>
+<span class="sourceLineNo">901</span>            for (Map.Entry&lt;Long, byte[]&gt; entry : navigableMap.entrySet()) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>              assertTrue("The value at time " + entry.getKey()<a name="line.902"></a>
+<span class="sourceLineNo">903</span>                              + " did not match what was put",<a name="line.903"></a>
+<span class="sourceLineNo">904</span>                      Bytes.equals(VALUE, entry.getValue()));<a name="line.904"></a>
+<span class="sourceLineNo">905</span>            }<a name="line.905"></a>
+<span class="sourceLineNo">906</span>            synchronized (waitLock) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>              waitLock.wait();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>            }<a name="line.908"></a>
+<span class="sourceLineNo">909</span>          } catch (Exception ignored) {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>          } catch (AssertionError e) {<a name="line.910"></a>
+<span class="sourceLineNo">911</span>            // the error happens in a thread, it won't fail the test,<a name="line.911"></a>
+<span class="sourceLineNo">912</span>            // need to pass it to the caller for proper handling.<a name="line.912"></a>
+<span class="sourceLineNo">913</span>            error.set(e);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>            LOG.error(e.toString(), e);<a name="line.914"></a>
+<span class="sourceLineNo">915</span>          }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>          return null;<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>      synchronized (waitLock) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>        waitLock.notifyAll();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      executorService.shutdownNow();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      assertNull(error.get());<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  }<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>  @Test<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  public void testCheckAndPut() throws IOException {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>    final byte [] anotherrow = Bytes.toBytes("anotherrow");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>    final byte [] value2 = Bytes.toBytes("abcd");<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      Put put1 = new Put(ROW);<a name="line.934"></a>
+<span class="sourceLineNo">935</span>      put1.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.935"></a>
+<span class="sourceLineNo">936</span><a name="line.936"></a>
+<span class="sourceLineNo">937</span>      // row doesn't exist, so using non-null value should be considered "not match".<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>              .ifEquals(VALUE).thenPut(put1);<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      assertFalse(ok);<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>      // row doesn't exist, so using "ifNotExists" should be considered "match".<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put1);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      assertTrue(ok);<a name="line.944"></a>
+<span class="sourceLineNo">945</span><a name="line.945"></a>
+<span class="sourceLineNo">946</span>      // row now exists, so using "ifNotExists" should be considered "not match".<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put1);<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      assertFalse(ok);<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>      Put put2 = new Put(ROW);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.951"></a>
+<span class="sourceLineNo">952</span><a name="line.952"></a>
+<span class="sourceLineNo">953</span>      // row now exists, use the matching value to check<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifEquals(VALUE).thenPut(put2);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      assertTrue(ok);<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>      Put put3 = new Put(anotherrow);<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      put3.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.958"></a>
+<span class="sourceLineNo">959</span><a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // try to do CheckAndPut on different rows<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      try {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>        table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifEquals(value2).thenPut(put3);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>        fail("trying to check and modify different rows should have failed.");<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      } catch (Exception ignored) {<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      }<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><a name="line.968"></a>
+<span class="sourceLineNo">969</span>  @Test<a name="line.969"></a>
+<span class="sourceLineNo">970</span>  public void testCheckAndMutateWithTimeRange() throws IOException {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      final long ts = EnvironmentEdgeManager.currentTime() / 2;<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Put put = new Put(ROW);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      put.addColumn(FAMILY, QUALIFIER, ts, VALUE);<a name="line.974"></a>
+<span class="sourceLineNo">975</span><a name="line.975"></a>
+<span class="sourceLineNo">976</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.976"></a>
+<span class="sourceLineNo">977</span>              .ifNotExists()<a name="line.977"></a>
+<span class="sourceLineNo">978</span>              .thenPut(put);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>      assertTrue(ok);<a name="line.979"></a>
+<span class="sourceLineNo">980</span><a name="line.980"></a>
+<span class="sourceLineNo">981</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.981"></a>
+<span class="sourceLineNo">982</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.982"></a>
+<span class="sourceLineNo">983</span>              .ifEquals(VALUE)<a name="line.983"></a>
+<span class="sourceLineNo">984</span>              .thenPut(put);<a name="line.984"></a>
+<span class="sourceLineNo">985</span>      assertFalse(ok);<a name="line.985"></a>
+<span class="sourceLineNo">986</span><a name="line.986"></a>
+<span class="sourceLineNo">987</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.987"></a>
+<span class="sourceLineNo">988</span>              .timeRange(TimeRange.from(ts + 10000))<a name="line.988"></a>
+<span class="sourceLineNo">989</span>              .ifEquals(VALUE)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>              .thenPut(put);<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      assertFalse(ok);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.993"></a>
+<span class="sourceLineNo">994</span>              .timeRange(TimeRange.between(ts + 10000, ts + 20000))<a name="line.994"></a>
+<span class="sourceLineNo">995</span>              .ifEquals(VALUE)<a name="line.995"></a>
+<span class="sourceLineNo">996</span>              .thenPut(put);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      assertFalse(ok);<a name="line.997"></a>
+<span class="sourceLineNo">998</span><a name="line.998"></a>
+<span class="sourceLineNo">999</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>              .timeRange(TimeRange.until(ts))<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>              .ifEquals(VALUE)<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>              .thenPut(put);<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      assertFalse(ok);<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span><a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>              .timeRange(TimeRange.at(ts))<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>              .ifEquals(VALUE)<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>              .thenPut(put);<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      assertTrue(ok);<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span><a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>              .timeRange(TimeRange.from(ts))<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>              .ifEquals(VALUE)<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>              .thenPut(put);<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      assertTrue(ok);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span><a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>              .timeRange(TimeRange.between(ts, ts + 20000))<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>              .ifEquals(VALUE)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>              .thenPut(put);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      assertTrue(ok);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span><a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>              .timeRange(TimeRange.until(ts + 10000))<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>              .ifEquals(VALUE)<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>              .thenPut(put);<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      assertTrue(ok);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span><a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      RowMutations rm = new RowMutations(ROW)<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              .add((Mutation) put);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              .ifEquals(VALUE)<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>              .thenMutate(rm);<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      assertFalse(ok);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>              .timeRange(TimeRange.at(ts))<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              .ifEquals(VALUE)<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              .thenMutate(rm);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      assertTrue(ok);<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span><a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      Delete delete = new Delete(ROW)<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              .addColumn(FAMILY, QUALIFIER);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span><a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>              .timeRange(TimeRange.at(ts + 10000))<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>              .ifEquals(VALUE)<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>              .thenDelete(delete);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>      assertFalse(ok);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span><a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>              .timeRange(TimeRange.at(ts))<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>              .ifEquals(VALUE)<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>              .thenDelete(delete);<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>      assertTrue(ok);<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    }<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>  @Test<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>  public void testCheckAndPutWithCompareOp() throws IOException {<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    final byte [] value2 = Bytes.toBytes("bbbb");<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    final byte [] value3 = Bytes.toBytes("cccc");<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    final byte [] value4 = Bytes.toBytes("dddd");<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span><a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span><a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Put put2 = new Put(ROW);<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span><a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      Put put3 = new Put(ROW);<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      put3.addColumn(FAMILY, QUALIFIER, value3);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span><a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      // row doesn't exist, so using "ifNotExists" should be considered "match".<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      boolean ok =<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>              table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER).ifNotExists().thenPut(put2);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      assertTrue(ok);<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span><a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // cell = "bbbb", using "aaaa" to compare only LESS/LESS_OR_EQUAL/NOT_EQUAL<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      // turns out "match"<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>              .ifMatches(CompareOperator.GREATER, value1).thenPut(put2);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      assertFalse(ok);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>              .ifMatches(CompareOperator.EQUAL, value1).thenPut(put2);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      assertFalse(ok);<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value1).thenPut(put2);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      assertFalse(ok);<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>              .ifMatches(CompareOperator.LESS, value1).thenPut(put2);<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      assertTrue(ok);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value1).thenPut(put2);<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      assertTrue(ok);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>              .ifMatches(CompareOperator.NOT_EQUAL, value1).thenPut(put3);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      assertTrue(ok);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span><a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      // cell = "cccc", using "dddd" to compare only LARGER/LARGER_OR_EQUAL/NOT_EQUAL<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      // turns out "match"<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>              .ifMatches(CompareOperator.LESS, value4).thenPut(put3);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      assertFalse(ok);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value4).thenPut(put3);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      assertFalse(ok);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>              .ifMatches(CompareOperator.EQUAL, value4).thenPut(put3);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      assertFalse(ok);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>              .ifMatches(CompareOperator.GREATER, value4).thenPut(put3);<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      assertTrue(ok);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value4).thenPut(put3);<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      assertTrue(ok);<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>              .ifMatches(CompareOperator.NOT_EQUAL, value4).thenPut(put2);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      assertTrue(ok);<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      // cell = "bbbb", using "bbbb" to compare only GREATER_OR_EQUAL/LESS_OR_EQUAL/EQUAL<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      // turns out "match"<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>              .ifMatches(CompareOperator.GREATER, value2).thenPut(put2);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      assertFalse(ok);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>              .ifMatches(CompareOperator.NOT_EQUAL, value2).thenPut(put2);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      assertFalse(ok);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>              .ifMatches(CompareOperator.LESS, value2).thenPut(put2);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>      assertFalse(ok);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value2).thenPut(put2);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(ok);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value2).thenPut(put2);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      assertTrue(ok);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>              .ifMatches(CompareOperator.EQUAL, value2).thenPut(put3);<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>      assertTrue(ok);<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><a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>  @Test<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>  public void testCheckAndDelete() throws IOException {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span><a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(),<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        FAMILY)) {<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      Put put = new Put(ROW);<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      put.addColumn(FAMILY, QUALIFIER, value1);<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      table.put(put);<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span><a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      Delete delete = new Delete(ROW);<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      delete.addColumns(FAMILY, QUALIFIER);<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>              .ifEquals(value1).thenDelete(delete);<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      assertTrue(ok);<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>  }<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span><a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>  @Test<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>  public void testCheckAndDeleteWithCompareOp() throws IOException {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    final byte [] value1 = Bytes.toBytes("aaaa");<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    final byte [] value2 = Bytes.toBytes("bbbb");<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    final byte [] value3 = Bytes.toBytes("cccc");<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    final byte [] value4 = Bytes.toBytes("dddd");<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(),<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>        FAMILY)) {<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      Put put2 = new Put(ROW);<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      put2.addColumn(FAMILY, QUALIFIER, value2);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      table.put(put2);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span><a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>      Put put3 = new Put(ROW);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>      put3.addColumn(FAMILY, QUALIFIER, value3);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span><a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>      Delete delete = new Delete(ROW);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>      delete.addColumns(FAMILY, QUALIFIER);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>      // cell = "bbbb", using "aaaa" to compare only LESS/LESS_OR_EQUAL/NOT_EQUAL<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>      // turns out "match"<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      boolean ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>              .ifMatches(CompareOperator.GREATER, value1).thenDelete(delete);<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      assertFalse(ok);<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>              .ifMatches(CompareOperator.EQUAL, value1).thenDelete(delete);<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      assertFalse(ok);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value1).thenDelete(delete);<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      assertFalse(ok);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>              .ifMatches(CompareOperator.LESS, value1).thenDelete(delete);<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      assertTrue(ok);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      table.put(put2);<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value1).thenDelete(delete);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      assertTrue(ok);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      table.put(put2);<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>              .ifMatches(CompareOperator.NOT_EQUAL, value1).thenDelete(delete);<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      assertTrue(ok);<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span><a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      // cell = "cccc", using "dddd" to compare only LARGER/LARGER_OR_EQUAL/NOT_EQUAL<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>      // turns out "match"<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      table.put(put3);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>              .ifMatches(CompareOperator.LESS, value4).thenDelete(delete);<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      assertFalse(ok);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value4).thenDelete(delete);<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      assertFalse(ok);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>              .ifMatches(CompareOperator.EQUAL, value4).thenDelete(delete);<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      assertFalse(ok);<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>              .ifMatches(CompareOperator.GREATER, value4).thenDelete(delete);<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      assertTrue(ok);<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      table.put(put3);<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value4).thenDelete(delete);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      assertTrue(ok);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      table.put(put3);<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>              .ifMatches(CompareOperator.NOT_EQUAL, value4).thenDelete(delete);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      assertTrue(ok);<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span><a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      // cell = "bbbb", using "bbbb" to compare only GREATER_OR_EQUAL/LESS_OR_EQUAL/EQUAL<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      // turns out "match"<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      table.put(put2);<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>              .ifMatches(CompareOperator.GREATER, value2).thenDelete(delete);<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      assertFalse(ok);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>              .ifMatches(CompareOperator.NOT_EQUAL, value2).thenDelete(delete);<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      assertFalse(ok);<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>              .ifMatches(CompareOperator.LESS, value2).thenDelete(delete);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      assertFalse(ok);<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>              .ifMatches(CompareOperator.GREATER_OR_EQUAL, value2).thenDelete(delete);<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      assertTrue(ok);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      table.put(put2);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>              .ifMatches(CompareOperator.LESS_OR_EQUAL, value2).thenDelete(delete);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      assertTrue(ok);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      table.put(put2);<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>              .ifMatches(CompareOperator.EQUAL, value2).thenDelete(delete);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      assertTrue(ok);<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>    }<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span><a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>  /**<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>  * Test ScanMetrics<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  @Test<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  @SuppressWarnings({"unused", "checkstyle:EmptyBlock"})<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>  public void testScanMetrics() throws Exception {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    final TableName tableName = name.getTableName();<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span><a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Set up test table:<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    // Create table:<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    try (Table ht = TEST_UTIL.createMultiRegionTable(tableName, FAMILY)) {<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      int numOfRegions;<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>      try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        numOfRegions = r.getStartKeys().length;<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      }<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      // Create 3 rows in the table, with rowkeys starting with "zzz*" so that<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>      // scan are forced to hit all the regions.<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>      Put put1 = new Put(Bytes.toBytes("zzz1"));<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>      put1.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>      Put put2 = new Put(Bytes.toBytes("zzz2"));<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>      put2.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      Put put3 = new Put(Bytes.toBytes("zzz3"));<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>      put3.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      ht.put(Arrays.asList(put1, put2, put3));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      Scan scan1 = new Scan();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>      int numRecords = 0;<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>      try (ResultScanner scanner = ht.getScanner(scan1)) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>        for (Result result : scanner) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>          numRecords++;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>        }<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span><a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>        LOG.info("test data has {} records.", numRecords);<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span><a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>        // by default, scan metrics collection is turned off<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>        assertNull(scanner.getScanMetrics());<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      }<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span><a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      // turn on scan metrics<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>      Scan scan2 = new Scan();<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>      scan2.setScanMetricsEnabled(true);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>      scan2.setCaching(numRecords + 1);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>        for (Result result : scanner.next(numRecords - 1)) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>        }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>        assertNotNull(scanner.getScanMetrics());<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>      }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>      // set caching to 1, because metrics are collected in each roundtrip only<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>      scan2 = new Scan();<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>      scan2.setScanMetricsEnabled(true);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>      scan2.setCaching(1);<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>        // per HBASE-5717, this should still collect even if you don't run all the way to<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>        // the end of the scanner. So this is asking for 2 of the 3 rows we inserted.<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>        for (Result result : scanner.next(numRecords - 1)) {<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>        }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>        assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>          scanMetrics.countOfRegions.get());<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>      }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>      // check byte counters<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      scan2 = new Scan();<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>      scan2.setScanMetricsEnabled(true);<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      scan2.setCaching(1);<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>        int numBytes = 0;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>        for (Result result : scanner) {<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>          for (Cell cell : result.listCells()) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>            numBytes += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        }<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        assertEquals("Did not count the result bytes", numBytes,<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>          scanMetrics.countOfBytesInResults.get());<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>      }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      // check byte counters on a small scan<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      scan2 = new Scan();<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      scan2.setScanMetricsEnabled(true);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      scan2.setCaching(1);<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      scan2.setReadType(ReadType.PREAD);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      try (ResultScanner scanner = ht.getScanner(scan2)) {<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>        int numBytes = 0;<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        for (Result result : scanner) {<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>          for (Cell cell : result.listCells()) {<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>            numBytes += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>          }<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>        }<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>        assertEquals("Did not count the result bytes", numBytes,<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>          scanMetrics.countOfBytesInResults.get());<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      }<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span><a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>      // now, test that the metrics are still collected even if you don't call close, but do<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>      // run past the end of all the records<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>      /** There seems to be a timing issue here.  Comment out for now. Fix when time.<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>       Scan scanWithoutClose = new Scan();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>       scanWithoutClose.setCaching(1);<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>       scanWithoutClose.setScanMetricsEnabled(true);<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>       ResultScanner scannerWithoutClose = ht.getScanner(scanWithoutClose);<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>       for (Result result : scannerWithoutClose.next(numRecords + 1)) {<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>       }<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>       ScanMetrics scanMetricsWithoutClose = getScanMetrics(scanWithoutClose);<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>       assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>       scanMetricsWithoutClose.countOfRegions.get());<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>      // finally,<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>      // test that the metrics are collected correctly if you both run past all the records,<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      // AND close the scanner<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      Scan scanWithClose = new Scan();<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>      // make sure we can set caching up to the number of a scanned values<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      scanWithClose.setCaching(numRecords);<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      scanWithClose.setScanMetricsEnabled(true);<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      try (ResultScanner scannerWithClose = ht.getScanner(scanWithClose)) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>        for (Result result : scannerWithClose.next(numRecords + 1)) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        }<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>        scannerWithClose.close();<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        ScanMetrics scanMetricsWithClose = scannerWithClose.getScanMetrics();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>        assertEquals("Did not access all the regions in the table", numOfRegions,<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          scanMetricsWithClose.countOfRegions.get());<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      }<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    } finally {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      TEST_UTIL.deleteTable(tableName);<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><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>  /**<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * Tests that cache on write works all the way up from the client-side.<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   *<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   * Performs inserts, flushes, and compactions, verifying changes in the block<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>   * cache along the way.<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>   */<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  @Test<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public void testCacheOnWriteEvictOnClose() throws Exception {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    final TableName tableName = name.getTableName();<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    byte [] data = Bytes.toBytes("data");<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        // get the block cache and region<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        String regionName = locator.getAllRegionLocations().get(0).getRegion().getEncodedName();<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>        HRegion region = TEST_UTIL.getRSForFirstRegionInTable(tableName)<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>                .getRegion(regionName);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        HStore store = region.getStores().iterator().next();<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>        CacheConfig cacheConf = store.getCacheConfig();<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        cacheConf.setCacheDataOnWrite(true);<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        cacheConf.setEvictOnClose(true);<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        BlockCache cache = cacheConf.getBlockCache().get();<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        // establish baseline stats<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>        long startBlockCount = cache.getBlockCount();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>        long startBlockHits = cache.getStats().getHitCount();<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        long startBlockMiss = cache.getStats().getMissCount();<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span><a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        // wait till baseline is stable, (minimal 500 ms)<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        for (int i = 0; i &lt; 5; i++) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          Thread.sleep(100);<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          if (startBlockCount != cache.getBlockCount()<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>                  || startBlockHits != cache.getStats().getHitCount()<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>                  || startBlockMiss != cache.getStats().getMissCount()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>            startBlockCount = cache.getBlockCount();<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            startBlockHits = cache.getStats().getHitCount();<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>            startBlockMiss = cache.getStats().getMissCount();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>            i = -1;<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>        // insert data<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        Put put = new Put(ROW);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>        put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        table.put(put);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span><a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>        // data was in memstore so don't expect any changes<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        assertEquals(startBlockCount, cache.getBlockCount());<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>        assertEquals(startBlockHits, cache.getStats().getHitCount());<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        assertEquals(startBlockMiss, cache.getStats().getMissCount());<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span><a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        // flush the data<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>        LOG.debug("Flushing cache");<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        region.flush(true);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span><a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>        // expect two more blocks in cache - DATA and ROOT_INDEX<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>        // , no change in hits/misses<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        long expectedBlockCount = startBlockCount + 2;<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        long expectedBlockHits = startBlockHits;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        long expectedBlockMiss = startBlockMiss;<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>        // read the data and expect same blocks, one new hit, no misses<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        assertEquals(++expectedBlockHits, cache.getStats().getHitCount());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        // insert a second column, read the row, no new blocks, one new hit<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        byte[] data2 = Bytes.add(data, data);<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        put = new Put(ROW);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        table.put(put);<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        Result r = table.get(new Get(ROW));<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>        assertEquals(++expectedBlockHits, cache.getStats().getHitCount());<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        // flush, one new block<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        System.out.println("Flushing cache");<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        region.flush(true);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        // + 1 for Index Block, +1 for data block<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        expectedBlockCount += 2;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        // compact, net minus two blocks, two hits, no misses<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        System.out.println("Compacting");<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        assertEquals(2, store.getStorefilesCount());<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        store.triggerMajorCompaction();<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        region.compact(true);<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        store.closeAndArchiveCompactedFiles();<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        assertEquals(1, store.getStorefilesCount());<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        // evicted two data blocks and two index blocks and compaction does not cache new blocks<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        expectedBlockCount = 0;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        expectedBlockHits += 2;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        assertEquals(expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        // read the row, this should be a cache miss because we don't cache data<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        // blocks on compaction<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        r = table.get(new Get(ROW));<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        expectedBlockCount += 1; // cached one data block<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        assertEquals(expectedBlockCount, cache.getBlockCount());<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        assertEquals(expectedBlockHits, cache.getStats().getHitCount());<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>        assertEquals(++expectedBlockMiss, cache.getStats().getMissCount());<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span><a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  private void waitForStoreFileCount(HStore store, int count, int timeout)<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      throws InterruptedException {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    while (start + timeout &gt; EnvironmentEdgeManager.currentTime() &amp;&amp;<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        store.getStorefilesCount() != count) {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      Thread.sleep(100);<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    System.out.println("start=" + start + ", now=" + EnvironmentEdgeManager.currentTime() +<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      ", cur=" + store.getStorefilesCount());<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>  }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span><a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  /**<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>   * Tests the non cached version of getRegionLocator by moving a region.<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>   */<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  @Test<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  public void testNonCachedGetRegionLocation() throws Exception {<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    // Test Initialization.<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    final TableName tableName = name.getTableName();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    byte [] family1 = Bytes.toBytes("f1");<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    byte [] family2 = Bytes.toBytes("f2");<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    try (Table ignored = TEST_UTIL.createTable(tableName, new byte[][] {family1, family2}, 10);<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>        Admin admin = TEST_UTIL.getAdmin();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      List&lt;HRegionLocation&gt; allRegionLocations = locator.getAllRegionLocations();<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      assertEquals(1, allRegionLocations.size());<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      RegionInfo regionInfo = allRegionLocations.get(0).getRegion();<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      ServerName addrBefore = allRegionLocations.get(0).getServerName();<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Verify region location before move.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      HRegionLocation addrCache = locator.getRegionLocation(regionInfo.getStartKey(), false);<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      HRegionLocation addrNoCache = locator.getRegionLocation(regionInfo.getStartKey(),  true);<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      assertEquals(addrBefore.getPort(), addrCache.getPort());<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      assertEquals(addrBefore.getPort(), addrNoCache.getPort());<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      // Make sure more than one server.<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      if (TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size() &lt;= 1) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>        TEST_UTIL.getMiniHBaseCluster().startRegionServer();<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        Waiter.waitFor(TEST_UTIL.getConfiguration(), 30000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          @Override public boolean evaluate() throws Exception {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>            return TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size() &gt; 1;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>          }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>        });<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span><a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      ServerName addrAfter = null;<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      // Now move the region to a different server.<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      for (int i = 0; i &lt; TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>           i++) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(i);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        ServerName addr = regionServer.getServerName();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        if (addr.getPort() != addrBefore.getPort()) {<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          admin.move(regionInfo.getEncodedNameAsBytes(), addr);<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>          // Wait for the region to move.<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          Thread.sleep(5000);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          addrAfter = addr;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          break;<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      }<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span><a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>      // Verify the region was moved.<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      addrCache = locator.getRegionLocation(regionInfo.getStartKey(), false);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      addrNoCache = locator.getRegionLocation(regionInfo.getStartKey(), true);<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      assertNotNull(addrAfter);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      assertTrue(addrAfter.getPort() != addrCache.getPort());<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      assertEquals(addrAfter.getPort(), addrNoCache.getPort());<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>  }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>  /**<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>   * Tests getRegionsInRange by creating some regions over which a range of<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>   * keys spans; then changing the key range.<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>   */<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>  @Test<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public void testGetRegionsInRange() throws Exception {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    // Test Initialization.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>    byte [] startKey = Bytes.toBytes("ddc");<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    byte [] endKey = Bytes.toBytes("mmm");<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    TableName tableName = name.getTableName();<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[][] { FAMILY }, 10);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    int numOfRegions;<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      numOfRegions = r.getStartKeys().length;<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>    }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    assertEquals(26, numOfRegions);<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    // Get the regions in this range<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    List&lt;HRegionLocation&gt; regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    assertEquals(10, regionsList.size());<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span><a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    // Change the start key<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    startKey = Bytes.toBytes("fff");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    assertEquals(7, regionsList.size());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    // Change the end key<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    endKey = Bytes.toBytes("nnn");<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    assertEquals(8, regionsList.size());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    // Empty start key<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    regionsList = getRegionsInRange(tableName, HConstants.EMPTY_START_ROW, endKey);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    assertEquals(13, regionsList.size());<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span><a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // Empty end key<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    regionsList = getRegionsInRange(tableName, startKey, HConstants.EMPTY_END_ROW);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>    assertEquals(21, regionsList.size());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    // Both start and end keys empty<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    regionsList = getRegionsInRange(tableName, HConstants.EMPTY_START_ROW,<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>        HConstants.EMPTY_END_ROW);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    assertEquals(26, regionsList.size());<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span><a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    // Change the end key to somewhere in the last block<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    endKey = Bytes.toBytes("zzz1");<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    assertEquals(21, regionsList.size());<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span><a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    // Change the start key to somewhere in the first block<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    startKey = Bytes.toBytes("aac");<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    assertEquals(26, regionsList.size());<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    // Make start and end key the same<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    startKey = Bytes.toBytes("ccc");<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    endKey = Bytes.toBytes("ccc");<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    assertEquals(1, regionsList.size());<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>  }<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span><a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>  private List&lt;HRegionLocation&gt; getRegionsInRange(TableName tableName, byte[] startKey,<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      byte[] endKey) throws IOException {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    List&lt;HRegionLocation&gt; regionsInRange = new ArrayList&lt;&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    byte[] currentKey = startKey;<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    final boolean endKeyIsEndOfTable = Bytes.equals(endKey, HConstants.EMPTY_END_ROW);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      do {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        HRegionLocation regionLocation = r.getRegionLocation(currentKey);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        regionsInRange.add(regionLocation);<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentKey = regionLocation.getRegion().getEndKey();<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      } while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW)<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          &amp;&amp; (endKeyIsEndOfTable || Bytes.compareTo(currentKey, endKey) &lt; 0));<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      return regionsInRange;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  }<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span><a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>  @Test<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>  public void testJira6912() throws Exception {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    final TableName tableName = name.getTableName();<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    try (Table foo = TEST_UTIL.createTable(tableName, new byte[][] {FAMILY}, 10)) {<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span><a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      for (int i = 0; i != 100; i++) {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>        put.addColumn(FAMILY, FAMILY, Bytes.toBytes(i));<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        puts.add(put);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      }<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      foo.put(puts);<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      // If i comment this out it works<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      TEST_UTIL.flush();<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      Scan scan = new Scan();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      scan.withStartRow(Bytes.toBytes(1));<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      scan.withStopRow(Bytes.toBytes(3));<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      scan.addColumn(FAMILY, FAMILY);<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      scan.setFilter(new RowFilter(CompareOperator.NOT_EQUAL,<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>              new BinaryComparator(Bytes.toBytes(1))));<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span><a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      try (ResultScanner scanner = foo.getScanner(scan)) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        Result[] bar = scanner.next(100);<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        assertEquals(1, bar.length);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<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>  @Test<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>  public void testScan_NullQualifier() throws IOException {<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      Put put = new Put(ROW);<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      table.put(put);<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span><a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      put = new Put(ROW);<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      put.addColumn(FAMILY, null, VALUE);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      table.put(put);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      LOG.info("Row put");<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span><a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      Scan scan = new Scan();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      scan.addColumn(FAMILY, null);<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      Result[] bar = scanner.next(100);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      assertEquals(1, bar.length);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      assertEquals(1, bar[0].size());<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span><a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      scan = new Scan();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      scan.addFamily(FAMILY);<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>      scanner = table.getScanner(scan);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      bar = scanner.next(100);<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      assertEquals(1, bar.length);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      assertEquals(2, bar[0].size());<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    }<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>  @Test<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>  public void testNegativeTimestamp() throws IOException {<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      try {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        Put put = new Put(ROW, -1);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>        table.put(put);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        fail("Negative timestamps should not have been allowed");<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>      } catch (IllegalArgumentException ex) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span><a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        Put put = new Put(ROW);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        long ts = -1;<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>        put.addColumn(FAMILY, QUALIFIER, ts, VALUE);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>        table.put(put);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        fail("Negative timestamps should not have been allowed");<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      } catch (IllegalArgumentException ex) {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span><a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      try {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        Delete delete = new Delete(ROW, -1);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        table.delete(delete);<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        fail("Negative timestamps should not have been allowed");<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      } catch (IllegalArgumentException ex) {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      }<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span><a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      try {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        Delete delete = new Delete(ROW);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        delete.addFamily(FAMILY, -1);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        table.delete(delete);<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        fail("Negative timestamps should not have been allowed");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      } catch (IllegalArgumentException ex) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span><a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>      try {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>        Scan scan = new Scan();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        scan.setTimeRange(-1, 1);<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>        table.getScanner(scan);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>        fail("Negative timestamps should not have been allowed");<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      } catch (IllegalArgumentException ex) {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      // KeyValue should allow negative timestamps for backwards compat. Otherwise, if the user<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      // already has negative timestamps in cluster data, HBase won't be able to handle that<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      try {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>        new KeyValue(Bytes.toBytes(42), Bytes.toBytes(42), Bytes.toBytes(42), -1,<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                Bytes.toBytes(42));<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (IllegalArgumentException ex) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        fail("KeyValue SHOULD allow negative timestamps");<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Test<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  public void testRawScanRespectsVersions() throws Exception {<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    final TableName tableName = name.getTableName();<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      byte[] row = Bytes.toBytes("row");<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span><a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      // put the same row 4 times, with different values<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      Put p = new Put(row);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      p.addColumn(FAMILY, QUALIFIER, 10, VALUE);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      table.put(p);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>      p = new Put(row);<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      p.addColumn(FAMILY, QUALIFIER, 11, ArrayUtils.add(VALUE, (byte) 2));<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      table.put(p);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span><a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      p = new Put(row);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      p.addColumn(FAMILY, QUALIFIER, 12, ArrayUtils.add(VALUE, (byte) 3));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      table.put(p);<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span><a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      p = new Put(row);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      p.addColumn(FAMILY, QUALIFIER, 13, ArrayUtils.add(VALUE, (byte) 4));<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      table.put(p);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      int versions = 4;<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>      Scan s = new Scan().withStartRow(row);<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>      // get all the possible versions<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      s.readAllVersions();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      s.setRaw(true);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span><a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        int count = 0;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        for (Result r : scanner) {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>                  r.listCells().size());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>          count++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        }<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>                1, count);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      // then if we decrease the number of versions, but keep the scan raw, we should see exactly<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      // that number of versions<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      versions = 2;<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      s.readVersions(versions);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>        int count = 0;<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        for (Result r : scanner) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                  r.listCells().size());<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          count++;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                1, count);<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      // finally, if we turn off raw scanning, but max out the number of versions, we should go back<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>      // to seeing just three<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      versions = 3;<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      s.readVersions(versions);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        int count = 0;<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        for (Result r : scanner) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>                  r.listCells().size());<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          count++;<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                1, count);<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    TEST_UTIL.deleteTable(tableName);<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>  @Test<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public void testEmptyFilterList() throws Exception {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    // Test Initialization.<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    final TableName tableName = name.getTableName();<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span><a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      // Insert one row each region<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      Put put = new Put(Bytes.toBytes("row"));<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>      table.put(put);<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      List&lt;Result&gt; scanResults = new LinkedList&lt;&gt;();<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      Scan scan = new Scan();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      scan.setFilter(new FilterList());<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        for (Result r : scanner) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          scanResults.add(r);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>        }<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      assertEquals(1, scanResults.size());<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      Get g = new Get(Bytes.toBytes("row"));<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      g.setFilter(new FilterList());<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      Result getResult = table.get(g);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      Result scanResult = scanResults.get(0);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      assertEquals(scanResult.rawCells().length, getResult.rawCells().length);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      for (int i = 0; i != scanResult.rawCells().length; ++i) {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        Cell scanCell = scanResult.rawCells()[i];<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        Cell getCell = getResult.rawCells()[i];<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneRow(scanCell),<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>                CellUtil.cloneRow(getCell)));<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneFamily(scanCell),<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>                CellUtil.cloneFamily(getCell)));<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneQualifier(scanCell),<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>                CellUtil.cloneQualifier(getCell)));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(scanCell),<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>                CellUtil.cloneValue(getCell)));<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>    }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  @Test<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>  public void testSmallScan() throws Exception {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    // Test Initialization.<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>    final TableName tableName = name.getTableName();<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span><a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>      // Insert one row each region<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      int insertNum = 10;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        Put put = new Put(Bytes.toBytes("row" + String.format("%03d", i)));<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        table.put(put);<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span><a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // normal scan<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        int count = 0;<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        for (Result r : scanner) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>          assertFalse(r.isEmpty());<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>          count++;<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        }<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        assertEquals(insertNum, count);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span><a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // small scan<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      Scan scan = new Scan().withStartRow(HConstants.EMPTY_START_ROW)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        .withStopRow(HConstants.EMPTY_END_ROW, true);<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      scan.setSmall(true);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      scan.setCaching(2);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>        int count = 0;<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        for (Result r : scanner) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>          assertFalse(r.isEmpty());<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>          count++;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        assertEquals(insertNum, count);<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>  }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span><a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  @Test<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>  public void testSuperSimpleWithReverseScan() throws Exception {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    final TableName tableName = name.getTableName();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      Put put = new Put(Bytes.toBytes("0-b11111-0000000000000000000"));<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      ht.put(put);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000002"));<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      ht.put(put);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000004"));<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>      ht.put(put);<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000006"));<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      ht.put(put);<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000008"));<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      ht.put(put);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000001"));<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      ht.put(put);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000003"));<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      ht.put(put);<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000005"));<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>      ht.put(put);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000007"));<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>      ht.put(put);<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000009"));<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      ht.put(put);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>      Scan scan = new Scan().withStartRow(Bytes.toBytes("0-b11111-9223372036854775807"))<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>        .withStopRow(Bytes.toBytes("0-b11111-0000000000000000000"), true);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      scan.setReversed(true);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        Result result = scanner.next();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>        assertTrue(Bytes.equals(result.getRow(),<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>                Bytes.toBytes("0-b11111-0000000000000000008")));<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      }<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>  }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span><a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  @Test<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  public void testFiltersWithReverseScan() throws Exception {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    final TableName tableName = name.getTableName();<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      byte[][] ROWS = makeN(ROW, 10);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      byte[][] QUALIFIERS = {Bytes.toBytes("col0-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>              Bytes.toBytes("col1-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>              Bytes.toBytes("col2-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>              Bytes.toBytes("col3-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>              Bytes.toBytes("col4-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>              Bytes.toBytes("col5-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>              Bytes.toBytes("col6-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>              Bytes.toBytes("col7-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>              Bytes.toBytes("col8-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>              Bytes.toBytes("col9-&lt;d2v1&gt;-&lt;d3v2&gt;")};<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>        Put put = new Put(ROWS[i]);<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>        put.addColumn(FAMILY, QUALIFIERS[i], VALUE);<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>        ht.put(put);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>      }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      Scan scan = new Scan();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      scan.setReversed(true);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      scan.addFamily(FAMILY);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      Filter filter = new QualifierFilter(CompareOperator.EQUAL,<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>              new RegexStringComparator("col[1-5]"));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      scan.setFilter(filter);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        int expectedIndex = 5;<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>        for (Result result : scanner) {<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>          assertEquals(1, result.size());<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>          Cell c = result.rawCells()[0];<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>          assertTrue(Bytes.equals(c.getRowArray(), c.getRowOffset(), c.getRowLength(),<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>                  ROWS[expectedIndex], 0, ROWS[expectedIndex].length));<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>          assertTrue(Bytes.equals(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>                  c.getQualifierLength(), QUALIFIERS[expectedIndex], 0,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>                  QUALIFIERS[expectedIndex].length));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          expectedIndex--;<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>        }<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        assertEquals(0, expectedIndex);<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>  }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>  @Test<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  public void testKeyOnlyFilterWithReverseScan() throws Exception {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    final TableName tableName = name.getTableName();<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>      byte[][] ROWS = makeN(ROW, 10);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      byte[][] QUALIFIERS = {Bytes.toBytes("col0-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>              Bytes.toBytes("col1-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              Bytes.toBytes("col2-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              Bytes.toBytes("col3-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>              Bytes.toBytes("col4-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              Bytes.toBytes("col5-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>              Bytes.toBytes("col6-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>              Bytes.toBytes("col7-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              Bytes.toBytes("col8-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              Bytes.toBytes("col9-&lt;d2v1&gt;-&lt;d3v2&gt;")};<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        Put put = new Put(ROWS[i]);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>        put.addColumn(FAMILY, QUALIFIERS[i], VALUE);<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        ht.put(put);<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>      }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      Scan scan = new Scan();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>      scan.setReversed(true);<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>      scan.addFamily(FAMILY);<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      Filter filter = new KeyOnlyFilter(true);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>      scan.setFilter(filter);<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      try (ResultScanner ignored = ht.getScanner(scan)) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        int count = 0;<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        for (Result result : ht.getScanner(scan)) {<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>          assertEquals(1, result.size());<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          assertEquals(Bytes.SIZEOF_INT, result.rawCells()[0].getValueLength());<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>          assertEquals(VALUE.length, Bytes.toInt(CellUtil.cloneValue(result.rawCells()[0])));<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          count++;<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>        assertEquals(10, count);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Test simple table and non-existent row cases.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   */<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>  @Test<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>  public void testSimpleMissingWithReverseScan() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    final TableName tableName = name.getTableName();<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      byte[][] ROWS = makeN(ROW, 4);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>      // Try to get a row on an empty table<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>      Scan scan = new Scan();<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>      scan.setReversed(true);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      assertNullResult(result);<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      scan = new Scan().withStartRow(ROWS[0]);<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      scan.setReversed(true);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      result = getSingleScanResult(ht, scan);<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      assertNullResult(result);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      scan = new Scan().withStartRow(ROWS[0]).withStopRow(ROWS[1], true);<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      scan.setReversed(true);<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      result = getSingleScanResult(ht, scan);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      assertNullResult(result);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      scan = new Scan();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      scan.setReversed(true);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      scan.addFamily(FAMILY);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      result = getSingleScanResult(ht, scan);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      assertNullResult(result);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>      scan = new Scan();<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      scan.setReversed(true);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      result = getSingleScanResult(ht, scan);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>      assertNullResult(result);<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span><a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>      // Insert a row<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      Put put = new Put(ROWS[2]);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      ht.put(put);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>      // Make sure we can scan the row<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      scan = new Scan();<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      scan.setReversed(true);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      result = getSingleScanResult(ht, scan);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>      scan = new Scan().withStartRow(ROWS[3]).withStopRow(ROWS[0], true);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>      scan.setReversed(true);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      result = getSingleScanResult(ht, scan);<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span><a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      scan = new Scan().withStartRow(ROWS[2]).withStopRow(ROWS[1], true);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      scan.setReversed(true);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      result = getSingleScanResult(ht, scan);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>      // Try to scan empty rows around it<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Introduced MemStore#shouldSeekForReverseScan to fix the following<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      scan = new Scan().withStartRow(ROWS[1]);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      scan.setReversed(true);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      result = getSingleScanResult(ht, scan);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>      assertNullResult(result);<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  }<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>  @Test<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>  public void testNullWithReverseScan() throws Exception {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    final TableName tableName = name.getTableName();<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      // Null qualifier (should work)<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      Put put = new Put(ROW);<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      put.addColumn(FAMILY, null, VALUE);<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      ht.put(put);<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>      Delete delete = new Delete(ROW);<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      delete.addColumns(FAMILY, null);<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      ht.delete(delete);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span><a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    // Use a new table<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    try (Table ht =<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>       TEST_UTIL.createTable(TableName.valueOf(name.getTableName().toString() + "2"), FAMILY)) {<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      // Empty qualifier, byte[0] instead of null (should work)<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      Put put = new Put(ROW);<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      put.addColumn(FAMILY, HConstants.EMPTY_BYTE_ARRAY, VALUE);<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>      ht.put(put);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>      TEST_UTIL.flush();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>      Delete delete = new Delete(ROW);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      delete.addColumns(FAMILY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      ht.delete(delete);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      // Null value<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>      put = new Put(ROW);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      put.addColumn(FAMILY, QUALIFIER, null);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      ht.put(put);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      Scan scan = new Scan();<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>      scan.setReversed(true);<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>      assertSingleResult(result, ROW, FAMILY, QUALIFIER, null);<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span><a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  @Test<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  @SuppressWarnings("checkstyle:MethodLength")<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  public void testDeletesWithReverseScan() throws Exception {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    final TableName tableName = name.getTableName();<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    byte[][] ROWS = makeNAscii(ROW, 6);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    byte[][] FAMILIES = makeNAscii(FAMILY, 3);<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>    long[] ts = { 1000, 2000, 3000, 4000, 5000 };<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILIES, 3)) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span><a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>      Put put = new Put(ROW);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[0], VALUES[0]);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[1], VALUES[1]);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      ht.put(put);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>      Delete delete = new Delete(ROW);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      delete.addFamily(FAMILIES[0], ts[0]);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>      ht.delete(delete);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      Scan scan = new Scan().withStartRow(ROW);<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      scan.setReversed(true);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      scan.addFamily(FAMILIES[0]);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1]},<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>              new byte[][]{VALUES[1]}, 0, 0);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span><a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      // Test delete latest version<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      put = new Put(ROW);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[2], VALUES[2]);<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[3], VALUES[3]);<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>      put.addColumn(FAMILIES[0], null, ts[4], VALUES[4]);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      put.addColumn(FAMILIES[0], null, ts[2], VALUES[2]);<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      put.addColumn(FAMILIES[0], null, ts[3], VALUES[3]);<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      ht.put(put);<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span><a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      delete = new Delete(ROW);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      delete.addColumn(FAMILIES[0], QUALIFIER); // ts[4]<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      ht.delete(delete);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span><a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      scan = new Scan().withStartRow(ROW);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>      scan.setReversed(true);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      scan.addColumn(FAMILIES[0], QUALIFIER);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      result = getSingleScanResult(ht, scan);<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1],<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>              ts[2], ts[3]}, new byte[][]{VALUES[1], VALUES[2], VALUES[3]}, 0, 2);<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // Test for HBASE-1847<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      delete = new Delete(ROW);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>      delete.addColumn(FAMILIES[0], null);<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      ht.delete(delete);<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span><a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      // Cleanup null qualifier<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      delete = new Delete(ROW);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      delete.addColumns(FAMILIES[0], null);<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      ht.delete(delete);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span><a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      // Expected client behavior might be that you can re-put deleted values<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      // But alas, this is not to be. We can't put them back in either case.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span><a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      put = new Put(ROW);<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[0], VALUES[0]);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      ht.put(put);<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span><a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      // The Scanner returns the previous values, the expected-naive-unexpected<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      // behavior<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span><a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      scan = new Scan().withStartRow(ROW);<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      scan.setReversed(true);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>      scan.addFamily(FAMILIES[0]);<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      result = getSingleScanResult(ht, scan);<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1],<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>              ts[2], ts[3]}, new byte[][]{VALUES[1], VALUES[2], VALUES[3]}, 0, 2);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      // Test deleting an entire family from one row but not the other various<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>      // ways<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      put = new Put(ROWS[0]);<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      ht.put(put);<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span><a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>      put = new Put(ROWS[1]);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      ht.put(put);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span><a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      put = new Put(ROWS[2]);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>      ht.put(put);<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>      delete = new Delete(ROWS[0]);<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>      delete.addFamily(FAMILIES[2]);<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      ht.delete(delete);<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span><a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      delete = new Delete(ROWS[1]);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      delete.addColumns(FAMILIES[1], QUALIFIER);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>      ht.delete(delete);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>      delete = new Delete(ROWS[2]);<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      delete.addColumn(FAMILIES[1], QUALIFIER);<a name="line.2268"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // Make sure more than one server.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      if (TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size() &lt;= 1) {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        TEST_UTIL.getMiniHBaseCluster().startRegionServer();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        Waiter.waitFor(TEST_UTIL.getConfiguration(), 30000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          @Override public boolean evaluate() throws Exception {<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>            return TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size() &gt; 1;<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>        });<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      }<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span><a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>      ServerName addrAfter = null;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>      // Now move the region to a different server.<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      for (int i = 0; i &lt; TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>           i++) {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(i);<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>        ServerName addr = regionServer.getServerName();<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        if (addr.getPort() != addrBefore.getPort()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>          admin.move(regionInfo.getEncodedNameAsBytes(), addr);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>          // Wait for the region to move.<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          Thread.sleep(5000);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          addrAfter = addr;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          break;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      // Verify the region was moved.<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      addrCache = locator.getRegionLocation(regionInfo.getStartKey(), false);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      addrNoCache = locator.getRegionLocation(regionInfo.getStartKey(), true);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      assertNotNull(addrAfter);<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      assertTrue(addrAfter.getPort() != addrCache.getPort());<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      assertEquals(addrAfter.getPort(), addrNoCache.getPort());<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span><a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>  /**<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>   * Tests getRegionsInRange by creating some regions over which a range of<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>   * keys spans; then changing the key range.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>   */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>  @Test<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  public void testGetRegionsInRange() throws Exception {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    // Test Initialization.<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    byte [] startKey = Bytes.toBytes("ddc");<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    byte [] endKey = Bytes.toBytes("mmm");<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    TableName tableName = name.getTableName();<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[][] { FAMILY }, 10);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    int numOfRegions;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      numOfRegions = r.getStartKeys().length;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    assertEquals(26, numOfRegions);<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    // Get the regions in this range<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    List&lt;HRegionLocation&gt; regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    assertEquals(10, regionsList.size());<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    // Change the start key<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    startKey = Bytes.toBytes("fff");<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    assertEquals(7, regionsList.size());<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span><a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    // Change the end key<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    endKey = Bytes.toBytes("nnn");<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    assertEquals(8, regionsList.size());<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    // Empty start key<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    regionsList = getRegionsInRange(tableName, HConstants.EMPTY_START_ROW, endKey);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    assertEquals(13, regionsList.size());<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    // Empty end key<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    regionsList = getRegionsInRange(tableName, startKey, HConstants.EMPTY_END_ROW);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    assertEquals(21, regionsList.size());<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    // Both start and end keys empty<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    regionsList = getRegionsInRange(tableName, HConstants.EMPTY_START_ROW,<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        HConstants.EMPTY_END_ROW);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>    assertEquals(26, regionsList.size());<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    // Change the end key to somewhere in the last block<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>    endKey = Bytes.toBytes("zzz1");<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    assertEquals(21, regionsList.size());<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    // Change the start key to somewhere in the first block<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    startKey = Bytes.toBytes("aac");<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    assertEquals(26, regionsList.size());<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span><a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    // Make start and end key the same<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    startKey = Bytes.toBytes("ccc");<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>    endKey = Bytes.toBytes("ccc");<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>    regionsList = getRegionsInRange(tableName, startKey, endKey);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    assertEquals(1, regionsList.size());<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span><a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  private List&lt;HRegionLocation&gt; getRegionsInRange(TableName tableName, byte[] startKey,<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      byte[] endKey) throws IOException {<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    List&lt;HRegionLocation&gt; regionsInRange = new ArrayList&lt;&gt;();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>    byte[] currentKey = startKey;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    final boolean endKeyIsEndOfTable = Bytes.equals(endKey, HConstants.EMPTY_END_ROW);<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      do {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        HRegionLocation regionLocation = r.getRegionLocation(currentKey);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        regionsInRange.add(regionLocation);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>        currentKey = regionLocation.getRegion().getEndKey();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      } while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW)<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          &amp;&amp; (endKeyIsEndOfTable || Bytes.compareTo(currentKey, endKey) &lt; 0));<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      return regionsInRange;<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    }<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>  @Test<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>  public void testJira6912() throws Exception {<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    final TableName tableName = name.getTableName();<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    try (Table foo = TEST_UTIL.createTable(tableName, new byte[][] {FAMILY}, 10)) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      for (int i = 0; i != 100; i++) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>        put.addColumn(FAMILY, FAMILY, Bytes.toBytes(i));<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>        puts.add(put);<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      }<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      foo.put(puts);<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>      // If i comment this out it works<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      TEST_UTIL.flush();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span><a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      Scan scan = new Scan();<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      scan.withStartRow(Bytes.toBytes(1));<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      scan.withStopRow(Bytes.toBytes(3));<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      scan.addColumn(FAMILY, FAMILY);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      scan.setFilter(new RowFilter(CompareOperator.NOT_EQUAL,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>              new BinaryComparator(Bytes.toBytes(1))));<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      try (ResultScanner scanner = foo.getScanner(scan)) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        Result[] bar = scanner.next(100);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        assertEquals(1, bar.length);<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><a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>  @Test<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>  public void testScan_NullQualifier() throws IOException {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      Put put = new Put(ROW);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      table.put(put);<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      put = new Put(ROW);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      put.addColumn(FAMILY, null, VALUE);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      table.put(put);<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      LOG.info("Row put");<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span><a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      Scan scan = new Scan();<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      scan.addColumn(FAMILY, null);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      Result[] bar = scanner.next(100);<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      assertEquals(1, bar.length);<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      assertEquals(1, bar[0].size());<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span><a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      scan = new Scan();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      scan.addFamily(FAMILY);<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      scanner = table.getScanner(scan);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      bar = scanner.next(100);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      assertEquals(1, bar.length);<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      assertEquals(2, bar[0].size());<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>  @Test<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>  public void testNegativeTimestamp() throws IOException {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    try (Table table = TEST_UTIL.createTable(name.getTableName(), FAMILY)) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span><a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      try {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        Put put = new Put(ROW, -1);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>        table.put(put);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>        fail("Negative timestamps should not have been allowed");<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      } catch (IllegalArgumentException ex) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        Put put = new Put(ROW);<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>        long ts = -1;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        put.addColumn(FAMILY, QUALIFIER, ts, VALUE);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        table.put(put);<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        fail("Negative timestamps should not have been allowed");<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      } catch (IllegalArgumentException ex) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span><a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      try {<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>        Delete delete = new Delete(ROW, -1);<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>        table.delete(delete);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        fail("Negative timestamps should not have been allowed");<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (IllegalArgumentException ex) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span><a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      try {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        Delete delete = new Delete(ROW);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        delete.addFamily(FAMILY, -1);<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        table.delete(delete);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        fail("Negative timestamps should not have been allowed");<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      } catch (IllegalArgumentException ex) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span><a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      try {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        Scan scan = new Scan();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        scan.setTimeRange(-1, 1);<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        table.getScanner(scan);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        fail("Negative timestamps should not have been allowed");<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      } catch (IllegalArgumentException ex) {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>        assertTrue(ex.getMessage().contains("negative"));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span><a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      // KeyValue should allow negative timestamps for backwards compat. Otherwise, if the user<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      // already has negative timestamps in cluster data, HBase won't be able to handle that<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        new KeyValue(Bytes.toBytes(42), Bytes.toBytes(42), Bytes.toBytes(42), -1,<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>                Bytes.toBytes(42));<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (IllegalArgumentException ex) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        fail("KeyValue SHOULD allow negative timestamps");<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span><a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @Test<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public void testRawScanRespectsVersions() throws Exception {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>    final TableName tableName = name.getTableName();<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      byte[] row = Bytes.toBytes("row");<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span><a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      // put the same row 4 times, with different values<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      Put p = new Put(row);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>      p.addColumn(FAMILY, QUALIFIER, 10, VALUE);<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      table.put(p);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      p = new Put(row);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      p.addColumn(FAMILY, QUALIFIER, 11, ArrayUtils.add(VALUE, (byte) 2));<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>      table.put(p);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span><a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      p = new Put(row);<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      p.addColumn(FAMILY, QUALIFIER, 12, ArrayUtils.add(VALUE, (byte) 3));<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      table.put(p);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span><a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      p = new Put(row);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>      p.addColumn(FAMILY, QUALIFIER, 13, ArrayUtils.add(VALUE, (byte) 4));<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      table.put(p);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      int versions = 4;<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>      Scan s = new Scan().withStartRow(row);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // get all the possible versions<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      s.readAllVersions();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      s.setRaw(true);<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>        int count = 0;<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>        for (Result r : scanner) {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>                  r.listCells().size());<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          count++;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>                1, count);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      }<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span><a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      // then if we decrease the number of versions, but keep the scan raw, we should see exactly<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      // that number of versions<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      versions = 2;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      s.readVersions(versions);<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>        int count = 0;<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        for (Result r : scanner) {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>                  r.listCells().size());<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>          count++;<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                1, count);<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span><a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      // finally, if we turn off raw scanning, but max out the number of versions, we should go back<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>      // to seeing just three<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      versions = 3;<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      s.readVersions(versions);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      try (ResultScanner scanner = table.getScanner(s)) {<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        int count = 0;<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        for (Result r : scanner) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>          assertEquals("Found an unexpected number of results for the row!", versions,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                  r.listCells().size());<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          count++;<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>        assertEquals("Found more than a single row when raw scanning the table with a single row!",<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                1, count);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>      }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>    TEST_UTIL.deleteTable(tableName);<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>  @Test<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public void testEmptyFilterList() throws Exception {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    // Test Initialization.<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    final TableName tableName = name.getTableName();<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span><a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      // Insert one row each region<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      Put put = new Put(Bytes.toBytes("row"));<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>      table.put(put);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span><a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>      List&lt;Result&gt; scanResults = new LinkedList&lt;&gt;();<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      Scan scan = new Scan();<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      scan.setFilter(new FilterList());<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        for (Result r : scanner) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>          scanResults.add(r);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>        }<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      assertEquals(1, scanResults.size());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      Get g = new Get(Bytes.toBytes("row"));<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      g.setFilter(new FilterList());<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      Result getResult = table.get(g);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      Result scanResult = scanResults.get(0);<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      assertEquals(scanResult.rawCells().length, getResult.rawCells().length);<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (int i = 0; i != scanResult.rawCells().length; ++i) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        Cell scanCell = scanResult.rawCells()[i];<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        Cell getCell = getResult.rawCells()[i];<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneRow(scanCell),<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>                CellUtil.cloneRow(getCell)));<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneFamily(scanCell),<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>                CellUtil.cloneFamily(getCell)));<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneQualifier(scanCell),<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>                CellUtil.cloneQualifier(getCell)));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>        assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(scanCell),<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>                CellUtil.cloneValue(getCell)));<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>      }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>    }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span><a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>  @Test<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  public void testSmallScan() throws Exception {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    // Test Initialization.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    final TableName tableName = name.getTableName();<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      // Insert one row each region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      int insertNum = 10;<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        Put put = new Put(Bytes.toBytes("row" + String.format("%03d", i)));<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>        table.put(put);<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>      // normal scan<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        int count = 0;<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        for (Result r : scanner) {<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>          assertFalse(r.isEmpty());<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>          count++;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>        }<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        assertEquals(insertNum, count);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span><a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>      // small scan<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      Scan scan = new Scan().withStartRow(HConstants.EMPTY_START_ROW)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>        .withStopRow(HConstants.EMPTY_END_ROW, true);<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      scan.setReadType(ReadType.PREAD);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      scan.setCaching(2);<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>        int count = 0;<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        for (Result r : scanner) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>          assertFalse(r.isEmpty());<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>          count++;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>        assertEquals(insertNum, count);<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span><a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  @Test<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  public void testSuperSimpleWithReverseScan() throws Exception {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final TableName tableName = name.getTableName();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      Put put = new Put(Bytes.toBytes("0-b11111-0000000000000000000"));<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      ht.put(put);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000002"));<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      ht.put(put);<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000004"));<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>      ht.put(put);<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000006"));<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      ht.put(put);<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      put = new Put(Bytes.toBytes("0-b11111-0000000000000000008"));<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      ht.put(put);<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000001"));<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      ht.put(put);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000003"));<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>      ht.put(put);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000005"));<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>      ht.put(put);<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000007"));<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      ht.put(put);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>      put = new Put(Bytes.toBytes("0-b22222-0000000000000000009"));<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      ht.put(put);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>      Scan scan = new Scan().withStartRow(Bytes.toBytes("0-b11111-9223372036854775807"))<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>        .withStopRow(Bytes.toBytes("0-b11111-0000000000000000000"), true);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>      scan.setReversed(true);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>        Result result = scanner.next();<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>        assertTrue(Bytes.equals(result.getRow(),<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>                Bytes.toBytes("0-b11111-0000000000000000008")));<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span><a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  @Test<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>  public void testFiltersWithReverseScan() throws Exception {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    final TableName tableName = name.getTableName();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>      byte[][] ROWS = makeN(ROW, 10);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>      byte[][] QUALIFIERS = {Bytes.toBytes("col0-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>              Bytes.toBytes("col1-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>              Bytes.toBytes("col2-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>              Bytes.toBytes("col3-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>              Bytes.toBytes("col4-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>              Bytes.toBytes("col5-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>              Bytes.toBytes("col6-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>              Bytes.toBytes("col7-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>              Bytes.toBytes("col8-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>              Bytes.toBytes("col9-&lt;d2v1&gt;-&lt;d3v2&gt;")};<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        Put put = new Put(ROWS[i]);<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>        put.addColumn(FAMILY, QUALIFIERS[i], VALUE);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>        ht.put(put);<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>      }<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      Scan scan = new Scan();<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      scan.setReversed(true);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      scan.addFamily(FAMILY);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      Filter filter = new QualifierFilter(CompareOperator.EQUAL,<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>              new RegexStringComparator("col[1-5]"));<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>      scan.setFilter(filter);<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>      try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>        int expectedIndex = 5;<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        for (Result result : scanner) {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>          assertEquals(1, result.size());<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>          Cell c = result.rawCells()[0];<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>          assertTrue(Bytes.equals(c.getRowArray(), c.getRowOffset(), c.getRowLength(),<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>                  ROWS[expectedIndex], 0, ROWS[expectedIndex].length));<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>          assertTrue(Bytes.equals(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>                  c.getQualifierLength(), QUALIFIERS[expectedIndex], 0,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>                  QUALIFIERS[expectedIndex].length));<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          expectedIndex--;<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        }<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        assertEquals(0, expectedIndex);<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>  }<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span><a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>  @Test<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>  public void testKeyOnlyFilterWithReverseScan() throws Exception {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    final TableName tableName = name.getTableName();<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      byte[][] ROWS = makeN(ROW, 10);<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      byte[][] QUALIFIERS = {Bytes.toBytes("col0-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>              Bytes.toBytes("col1-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>              Bytes.toBytes("col2-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>              Bytes.toBytes("col3-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              Bytes.toBytes("col4-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              Bytes.toBytes("col5-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>              Bytes.toBytes("col6-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              Bytes.toBytes("col7-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>              Bytes.toBytes("col8-&lt;d2v1&gt;-&lt;d3v2&gt;"),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>              Bytes.toBytes("col9-&lt;d2v1&gt;-&lt;d3v2&gt;")};<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>      for (int i = 0; i &lt; 10; i++) {<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>        Put put = new Put(ROWS[i]);<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>        put.addColumn(FAMILY, QUALIFIERS[i], VALUE);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        ht.put(put);<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      }<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>      Scan scan = new Scan();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      scan.setReversed(true);<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      scan.addFamily(FAMILY);<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      Filter filter = new KeyOnlyFilter(true);<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>      scan.setFilter(filter);<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>      try (ResultScanner ignored = ht.getScanner(scan)) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        int count = 0;<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        for (Result result : ht.getScanner(scan)) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          assertEquals(1, result.size());<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>          assertEquals(Bytes.SIZEOF_INT, result.rawCells()[0].getValueLength());<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          assertEquals(VALUE.length, Bytes.toInt(CellUtil.cloneValue(result.rawCells()[0])));<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          count++;<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>        assertEquals(10, count);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  /**<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>   * Test simple table and non-existent row cases.<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>   */<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>  @Test<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  public void testSimpleMissingWithReverseScan() throws Exception {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    final TableName tableName = name.getTableName();<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      byte[][] ROWS = makeN(ROW, 4);<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span><a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      // Try to get a row on an empty table<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>      Scan scan = new Scan();<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      scan.setReversed(true);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>      assertNullResult(result);<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span><a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      scan = new Scan().withStartRow(ROWS[0]);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      scan.setReversed(true);<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      result = getSingleScanResult(ht, scan);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>      assertNullResult(result);<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>      scan = new Scan().withStartRow(ROWS[0]).withStopRow(ROWS[1], true);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      scan.setReversed(true);<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      result = getSingleScanResult(ht, scan);<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      assertNullResult(result);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      scan = new Scan();<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>      scan.setReversed(true);<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      scan.addFamily(FAMILY);<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      result = getSingleScanResult(ht, scan);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      assertNullResult(result);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span><a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>      scan = new Scan();<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      scan.setReversed(true);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      result = getSingleScanResult(ht, scan);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>      assertNullResult(result);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span><a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // Insert a row<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      Put put = new Put(ROWS[2]);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      ht.put(put);<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      // Make sure we can scan the row<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      scan = new Scan();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      scan.setReversed(true);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      result = getSingleScanResult(ht, scan);<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>      scan = new Scan().withStartRow(ROWS[3]).withStopRow(ROWS[0], true);<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      scan.setReversed(true);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>      result = getSingleScanResult(ht, scan);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span><a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>      scan = new Scan().withStartRow(ROWS[2]).withStopRow(ROWS[1], true);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>      scan.setReversed(true);<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>      result = getSingleScanResult(ht, scan);<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>      assertSingleResult(result, ROWS[2], FAMILY, QUALIFIER, VALUE);<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span><a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>      // Try to scan empty rows around it<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      // Introduced MemStore#shouldSeekForReverseScan to fix the following<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>      scan = new Scan().withStartRow(ROWS[1]);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>      scan.setReversed(true);<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      result = getSingleScanResult(ht, scan);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      assertNullResult(result);<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    }<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  }<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span><a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  @Test<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>  public void testNullWithReverseScan() throws Exception {<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    final TableName tableName = name.getTableName();<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      // Null qualifier (should work)<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>      Put put = new Put(ROW);<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>      put.addColumn(FAMILY, null, VALUE);<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>      ht.put(put);<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>      Delete delete = new Delete(ROW);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>      delete.addColumns(FAMILY, null);<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>      ht.delete(delete);<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>    // Use a new table<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    try (Table ht =<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>       TEST_UTIL.createTable(TableName.valueOf(name.getTableName().toString() + "2"), FAMILY)) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      // Empty qualifier, byte[0] instead of null (should work)<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>      Put put = new Put(ROW);<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>      put.addColumn(FAMILY, HConstants.EMPTY_BYTE_ARRAY, VALUE);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>      ht.put(put);<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>      TEST_UTIL.flush();<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>      scanTestNull(ht, ROW, FAMILY, VALUE, true);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      Delete delete = new Delete(ROW);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      delete.addColumns(FAMILY, HConstants.EMPTY_BYTE_ARRAY);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>      ht.delete(delete);<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      // Null value<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      put = new Put(ROW);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      put.addColumn(FAMILY, QUALIFIER, null);<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      ht.put(put);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>      Scan scan = new Scan();<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      scan.setReversed(true);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>      assertSingleResult(result, ROW, FAMILY, QUALIFIER, null);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>  }<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span><a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  @Test<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  @SuppressWarnings("checkstyle:MethodLength")<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  public void testDeletesWithReverseScan() throws Exception {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    final TableName tableName = name.getTableName();<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    byte[][] ROWS = makeNAscii(ROW, 6);<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    byte[][] FAMILIES = makeNAscii(FAMILY, 3);<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    long[] ts = { 1000, 2000, 3000, 4000, 5000 };<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILIES, 3)) {<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span><a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      Put put = new Put(ROW);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[0], VALUES[0]);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[1], VALUES[1]);<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>      ht.put(put);<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span><a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>      Delete delete = new Delete(ROW);<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      delete.addFamily(FAMILIES[0], ts[0]);<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      ht.delete(delete);<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>      Scan scan = new Scan().withStartRow(ROW);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      scan.setReversed(true);<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>      scan.addFamily(FAMILIES[0]);<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>      Result result = getSingleScanResult(ht, scan);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1]},<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>              new byte[][]{VALUES[1]}, 0, 0);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span><a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>      // Test delete latest version<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>      put = new Put(ROW);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[2], VALUES[2]);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[3], VALUES[3]);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>      put.addColumn(FAMILIES[0], null, ts[4], VALUES[4]);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>      put.addColumn(FAMILIES[0], null, ts[2], VALUES[2]);<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>      put.addColumn(FAMILIES[0], null, ts[3], VALUES[3]);<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>      ht.put(put);<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span><a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      delete = new Delete(ROW);<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>      delete.addColumn(FAMILIES[0], QUALIFIER); // ts[4]<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>      ht.delete(delete);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>      scan = new Scan().withStartRow(ROW);<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      scan.setReversed(true);<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>      scan.addColumn(FAMILIES[0], QUALIFIER);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      result = getSingleScanResult(ht, scan);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1],<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>              ts[2], ts[3]}, new byte[][]{VALUES[1], VALUES[2], VALUES[3]}, 0, 2);<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span><a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      // Test for HBASE-1847<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      delete = new Delete(ROW);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>      delete.addColumn(FAMILIES[0], null);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>      ht.delete(delete);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>      // Cleanup null qualifier<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>      delete = new Delete(ROW);<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      delete.addColumns(FAMILIES[0], null);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      ht.delete(delete);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span><a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      // Expected client behavior might be that you can re-put deleted values<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // But alas, this is not to be. We can't put them back in either case.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span><a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>      put = new Put(ROW);<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[0], VALUES[0]);<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>      put.addColumn(FAMILIES[0], QUALIFIER, ts[4], VALUES[4]);<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      ht.put(put);<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span><a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      // The Scanner returns the previous values, the expected-naive-unexpected<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      // behavior<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span><a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      scan = new Scan().withStartRow(ROW);<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>      scan.setReversed(true);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>      scan.addFamily(FAMILIES[0]);<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>      result = getSingleScanResult(ht, scan);<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>      assertNResult(result, ROW, FAMILIES[0], QUALIFIER, new long[]{ts[1],<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>              ts[2], ts[3]}, new byte[][]{VALUES[1], VALUES[2], VALUES[3]}, 0, 2);<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span><a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      // Test deleting an entire family from one row but not the other various<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      // ways<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      put = new Put(ROWS[0]);<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      ht.put(put);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span><a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>      put = new Put(ROWS[1]);<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      ht.put(put);<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span><a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      put = new Put(ROWS[2]);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[0], VALUES[0]);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>      put.addColumn(FAMILIES[1], QUALIFIER, ts[1], VALUES[1]);<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[2], VALUES[2]);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>      put.addColumn(FAMILIES[2], QUALIFIER, ts[3], VALUES[3]);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      ht.put(put);<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      delete = new Delete(ROWS[0]);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      delete.addFamily(FAMILIES[2]);<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>      ht.delete(delete);<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      delete = new Delete(ROWS[1]);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      delete.addColumns(FAMILIES[1], QUALIFIER);<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>      ht.delete(delete);<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span><a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>      delete = new Delete(ROWS[2]);<a name="line.2268"></a>
 <span class="sourceLineNo">2269</span>      delete.addColumn(FAMILIES[1], QUALIFIER);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      delete.addColumn(FAMILIES[2], QUALIFIER);<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      ht.delete(delete);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span><a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      scan = new Scan().withStartRow(ROWS[0]);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      scan.setReversed(true);<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      scan.addFamily(FAMILIES[1]);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      scan.addFamily(FAMILIES[2]);<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      result = getSingleScanResult(ht, scan);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>      assertNResult(result, ROWS[0], FAMILIES[1], QUALIFIER, new long[]{ts[0],<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>              ts[1]}, new byte[][]{VALUES[0], VALUES[1]}, 0, 1);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span><a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      scan = new Scan().withStartRow(ROWS[1]);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      scan.setReversed(true);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      scan.addFamily(FAMILIES[1]);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      scan.addFamily(FAMILIES[2]);<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      result = getSingleScanResult(ht, scan);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      scan = new Scan().withStartRow(ROWS[2]);<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>      scan.setReversed(true);<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      scan.addFamily(FAMILIES[1]);<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      scan.addFamily(FAMILIES[2]);<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      result = getSingleScanResult(ht, scan);<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      assertEquals(1, result.size());<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>      assertNResult(result, ROWS[2], FAMILIES[2], QUALIFIER,<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>              new long[]{ts[2]}, new byte[][]{VALUES[2]}, 0, 0);<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      // Test if we delete the family first in one row (HBASE-1541)<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span><a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      delete = new Delete(ROWS[3]);<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      delete.addFamily(FAMILIES[1]);<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      ht.delete(delete);<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span><a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      put = new Put(ROWS[3]);<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      put.addColumn(FAMILIES[2], QUALIFIER, VALUES[0]);<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      ht.put(put);<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span><a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      put = new Put(ROWS[4]);<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      put.addColumn(FAMILIES[1], QUALIFIER, VALUES[1]);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      put.addColumn(FAMILIES[2], QUALIFIER, VALUES[2]);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      ht.put(put);<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span><a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      scan = new Scan().withStartRow(ROWS[4]);<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      scan.setReversed(true);<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      scan.addFamily(FAMILIES[1]);<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      scan.addFamily(FAMILIES[2]);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      result = scanner.next();<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[0]), ROWS[4]));<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[1]), ROWS[4]));<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[0]), VALUES[1]));<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[1]), VALUES[2]));<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      result = scanner.next();<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      assertEquals("Expected 1 key but received " + result.size(), 1, result.size());<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[0]), ROWS[3]));<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[0]), VALUES[0]));<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      scanner.close();<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>    }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>  }<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>   * Tests reversed scan under multi regions<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>   */<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>  @Test<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>  public void testReversedScanUnderMultiRegions() throws Exception {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    // Test Initialization.<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>    final TableName tableName = name.getTableName();<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>    byte[] maxByteArray = ConnectionUtils.MAX_BYTE_ARRAY;<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>    byte[][] splitRows = new byte[][] { Bytes.toBytes("005"),<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        Bytes.add(Bytes.toBytes("005"), Bytes.multiple(maxByteArray, 16)),<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>        Bytes.toBytes("006"),<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        Bytes.add(Bytes.toBytes("006"), Bytes.multiple(maxByteArray, 8)),<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        Bytes.toBytes("007"),<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        Bytes.add(Bytes.toBytes("007"), Bytes.multiple(maxByteArray, 4)),<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        Bytes.toBytes("008"), Bytes.multiple(maxByteArray, 2) };<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, splitRows)) {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>      TEST_UTIL.waitUntilAllRegionsAssigned(table.getName());<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span><a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>      try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        assertEquals(splitRows.length + 1, l.getAllRegionLocations().size());<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      }<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      // Insert one row each region<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      int insertNum = splitRows.length;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      for (byte[] splitRow : splitRows) {<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>        Put put = new Put(splitRow);<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>        table.put(put);<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>      // scan forward<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>        int count = 0;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>        for (Result r : scanner) {<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>          assertFalse(r.isEmpty());<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>          count++;<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>        }<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        assertEquals(insertNum, count);<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>      // scan backward<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      Scan scan = new Scan();<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      scan.setReversed(true);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>        int count = 0;<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>        byte[] lastRow = null;<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>        for (Result r : scanner) {<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>          assertFalse(r.isEmpty());<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>          count++;<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>          byte[] thisRow = r.getRow();<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>          if (lastRow != null) {<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>            assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>                            + ",this row=" + Bytes.toString(thisRow),<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>                    Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>          }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>          lastRow = thisRow;<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>        }<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>        assertEquals(insertNum, count);<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>      }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    }<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  }<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>  /**<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>   * Tests reversed scan under multi regions<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>   */<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>  @Test<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>  public void testSmallReversedScanUnderMultiRegions() throws Exception {<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Test Initialization.<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    final TableName tableName = name.getTableName();<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    byte[][] splitRows = new byte[][]{<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>        Bytes.toBytes("000"), Bytes.toBytes("002"), Bytes.toBytes("004"),<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>        Bytes.toBytes("006"), Bytes.toBytes("008"), Bytes.toBytes("010")};<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, splitRows)) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>      TEST_UTIL.waitUntilAllRegionsAssigned(table.getName());<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span><a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>      try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        assertEquals(splitRows.length + 1, l.getAllRegionLocations().size());<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>      }<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      for (byte[] splitRow : splitRows) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>        Put put = new Put(splitRow);<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        table.put(put);<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span><a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        byte[] nextRow = Bytes.copy(splitRow);<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        nextRow[nextRow.length - 1]++;<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span><a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        put = new Put(nextRow);<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        table.put(put);<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>      // scan forward<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>        int count = 0;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        for (Result r : scanner) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          assertTrue(!r.isEmpty());<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          count++;<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        }<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        assertEquals(12, count);<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>      reverseScanTest(table, false);<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>      reverseScanTest(table, true);<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span><a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>  private void reverseScanTest(Table table, boolean small) throws IOException {<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    // scan backward<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    Scan scan = new Scan();<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    scan.setReversed(true);<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      int count = 0;<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>      byte[] lastRow = null;<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>      for (Result r : scanner) {<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>        assertTrue(!r.isEmpty());<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>        count++;<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>        byte[] thisRow = r.getRow();<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>        if (lastRow != null) {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>        }<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        lastRow = thisRow;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>      assertEquals(12, count);<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>    }<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span><a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>    scan = new Scan();<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    scan.setSmall(small);<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    scan.setReversed(true);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    scan.withStartRow(Bytes.toBytes("002"));<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      int count = 0;<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      byte[] lastRow = null;<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>      for (Result r : scanner) {<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>        assertTrue(!r.isEmpty());<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        count++;<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        byte[] thisRow = r.getRow();<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>        if (lastRow != null) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>        }<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        lastRow = thisRow;<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>      }<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>      assertEquals(3, count); // 000 001 002<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    scan = new Scan();<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    scan.setSmall(small);<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    scan.setReversed(true);<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    scan.withStartRow(Bytes.toBytes("002"));<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    scan.withStopRow(Bytes.toBytes("000"));<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      int count = 0;<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      byte[] lastRow = null;<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>      for (Result r : scanner) {<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>        assertFalse(r.isEmpty());<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>        count++;<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>        byte[] thisRow = r.getRow();<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>        if (lastRow != null) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        }<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>        lastRow = thisRow;<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      }<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      assertEquals(2, count); // 001 002<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    }<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span><a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    scan = new Scan();<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    scan.setSmall(small);<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    scan.setReversed(true);<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    scan.withStartRow(Bytes.toBytes("001"));<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      int count = 0;<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>      byte[] lastRow = null;<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>      for (Result r : scanner) {<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>        assertFalse(r.isEmpty());<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>        count++;<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>        byte[] thisRow = r.getRow();<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        if (lastRow != null) {<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        }<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        lastRow = thisRow;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      assertEquals(2, count); // 000 001<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    }<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    scan = new Scan();<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    scan.setSmall(small);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>    scan.setReversed(true);<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    scan.withStartRow(Bytes.toBytes("000"));<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      int count = 0;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>      byte[] lastRow = null;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      for (Result r : scanner) {<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        assertFalse(r.isEmpty());<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        count++;<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        byte[] thisRow = r.getRow();<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        if (lastRow != null) {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        lastRow = thisRow;<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>      }<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      assertEquals(1, count); // 000<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>    scan = new Scan();<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>    scan.setSmall(small);<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    scan.setReversed(true);<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>    scan.withStartRow(Bytes.toBytes("006"));<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>    scan.withStopRow(Bytes.toBytes("002"));<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      int count = 0;<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      byte[] lastRow = null;<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>      for (Result r : scanner) {<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        assertFalse(r.isEmpty());<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>        count++;<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>        byte[] thisRow = r.getRow();<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>        if (lastRow != null) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>        }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>        lastRow = thisRow;<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      }<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      assertEquals(4, count); // 003 004 005 006<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>    }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  }<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span><a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>  @Test<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>  public void testFilterAllRecords() throws IOException {<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>    Scan scan = new Scan();<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>    scan.setBatch(1);<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>    scan.setCaching(1);<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    // Filter out any records<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    scan.setFilter(new FilterList(new FirstKeyOnlyFilter(), new InclusiveStopFilter(new byte[0])));<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>    try (Table table = TEST_UTIL.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      try (ResultScanner s = table.getScanner(scan)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        assertNull(s.next());<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>      }<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><a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>  @Test<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>  public void testCellSizeLimit() throws IOException {<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    final TableName tableName = name.getTableName();<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      .setValue(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(10 * 1024))<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    try (Admin admin = TEST_UTIL.getAdmin()) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>      admin.createTable(tableDescriptor);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>    }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>    // Will succeed<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(0L)));<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      t.increment(new Increment(ROW).addColumn(FAMILY, QUALIFIER, 1L));<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>    }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>    // Will succeed<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[9*1024]));<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    // Will fail<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      try {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>        t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>        fail("Oversize cell failed to trigger exception");<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      } catch (IOException e) {<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>        // expected<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      }<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      try {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>        t.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[2 * 1024]));<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        fail("Oversize cell failed to trigger exception");<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      } catch (IOException e) {<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>        // expected<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>  }<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span><a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>  @Test<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>  public void testCellSizeNoLimit() throws IOException {<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>    final TableName tableName = name.getTableName();<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      .setValue(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(0))<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>    try (Admin admin = TEST_UTIL.getAdmin()) {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      admin.createTable(tableDescriptor);<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span><a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    // Will succeed<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    try (Table ht = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      ht.put(new Put(ROW).addColumn(FAMILY, QUALIFIER,  new byte[HRegion.DEFAULT_MAX_CELL_SIZE -<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        1024]));<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      ht.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[1024 + 1]));<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    }<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>  @Test<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void testDeleteSpecifiedVersionOfSpecifiedColumn() throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    final TableName tableName = name.getTableName();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>    long[] ts = {1000, 2000, 3000, 4000, 5000};<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY, 5)) {<a name="line.2645"></a>
+<span class="sourceLineNo">2270</span>      delete.addColumn(FAMILIES[1], QUALIFIER);<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      delete.addColumn(FAMILIES[2], QUALIFIER);<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ht.delete(delete);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span><a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      scan = new Scan().withStartRow(ROWS[0]);<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      scan.setReversed(true);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>      scan.addFamily(FAMILIES[1]);<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>      scan.addFamily(FAMILIES[2]);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      result = getSingleScanResult(ht, scan);<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      assertNResult(result, ROWS[0], FAMILIES[1], QUALIFIER, new long[]{ts[0],<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>              ts[1]}, new byte[][]{VALUES[0], VALUES[1]}, 0, 1);<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span><a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>      scan = new Scan().withStartRow(ROWS[1]);<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      scan.setReversed(true);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      scan.addFamily(FAMILIES[1]);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      scan.addFamily(FAMILIES[2]);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      result = getSingleScanResult(ht, scan);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span><a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>      scan = new Scan().withStartRow(ROWS[2]);<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>      scan.setReversed(true);<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      scan.addFamily(FAMILIES[1]);<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      scan.addFamily(FAMILIES[2]);<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>      result = getSingleScanResult(ht, scan);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>      assertEquals(1, result.size());<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>      assertNResult(result, ROWS[2], FAMILIES[2], QUALIFIER,<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>              new long[]{ts[2]}, new byte[][]{VALUES[2]}, 0, 0);<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span><a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      // Test if we delete the family first in one row (HBASE-1541)<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span><a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      delete = new Delete(ROWS[3]);<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      delete.addFamily(FAMILIES[1]);<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      ht.delete(delete);<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span><a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      put = new Put(ROWS[3]);<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      put.addColumn(FAMILIES[2], QUALIFIER, VALUES[0]);<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      ht.put(put);<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span><a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      put = new Put(ROWS[4]);<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      put.addColumn(FAMILIES[1], QUALIFIER, VALUES[1]);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>      put.addColumn(FAMILIES[2], QUALIFIER, VALUES[2]);<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>      ht.put(put);<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span><a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      scan = new Scan().withStartRow(ROWS[4]);<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      scan.setReversed(true);<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      scan.addFamily(FAMILIES[1]);<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      scan.addFamily(FAMILIES[2]);<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      scan.readVersions(Integer.MAX_VALUE);<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>      result = scanner.next();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>      assertEquals("Expected 2 keys but received " + result.size(), 2, result.size());<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[0]), ROWS[4]));<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[1]), ROWS[4]));<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[0]), VALUES[1]));<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[1]), VALUES[2]));<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      result = scanner.next();<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      assertEquals("Expected 1 key but received " + result.size(), 1, result.size());<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(result.rawCells()[0]), ROWS[3]));<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      assertTrue(Bytes.equals(CellUtil.cloneValue(result.rawCells()[0]), VALUES[0]));<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      scanner.close();<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    }<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>   * Tests reversed scan under multi regions<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>   */<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>  @Test<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  public void testReversedScanUnderMultiRegions() throws Exception {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>    // Test Initialization.<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>    final TableName tableName = name.getTableName();<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>    byte[] maxByteArray = ConnectionUtils.MAX_BYTE_ARRAY;<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>    byte[][] splitRows = new byte[][] { Bytes.toBytes("005"),<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Bytes.add(Bytes.toBytes("005"), Bytes.multiple(maxByteArray, 16)),<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Bytes.toBytes("006"),<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>        Bytes.add(Bytes.toBytes("006"), Bytes.multiple(maxByteArray, 8)),<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        Bytes.toBytes("007"),<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        Bytes.add(Bytes.toBytes("007"), Bytes.multiple(maxByteArray, 4)),<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>        Bytes.toBytes("008"), Bytes.multiple(maxByteArray, 2) };<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, splitRows)) {<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      TEST_UTIL.waitUntilAllRegionsAssigned(table.getName());<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span><a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        assertEquals(splitRows.length + 1, l.getAllRegionLocations().size());<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      }<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      // Insert one row each region<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>      int insertNum = splitRows.length;<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>      for (byte[] splitRow : splitRows) {<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>        Put put = new Put(splitRow);<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>        table.put(put);<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>      }<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>      // scan forward<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>        int count = 0;<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>        for (Result r : scanner) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>          assertFalse(r.isEmpty());<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>          count++;<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>        }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>        assertEquals(insertNum, count);<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>      // scan backward<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      Scan scan = new Scan();<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>      scan.setReversed(true);<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>        int count = 0;<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>        byte[] lastRow = null;<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>        for (Result r : scanner) {<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>          assertFalse(r.isEmpty());<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>          count++;<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>          byte[] thisRow = r.getRow();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>          if (lastRow != null) {<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>            assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>                            + ",this row=" + Bytes.toString(thisRow),<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>                    Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>          }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>          lastRow = thisRow;<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>        }<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>        assertEquals(insertNum, count);<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>      }<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    }<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>  }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>  /**<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>   * Tests reversed scan under multi regions<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>   */<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Test<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public void testSmallReversedScanUnderMultiRegions() throws Exception {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    // Test Initialization.<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    final TableName tableName = name.getTableName();<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    byte[][] splitRows = new byte[][]{<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>        Bytes.toBytes("000"), Bytes.toBytes("002"), Bytes.toBytes("004"),<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        Bytes.toBytes("006"), Bytes.toBytes("008"), Bytes.toBytes("010")};<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, splitRows)) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>      TEST_UTIL.waitUntilAllRegionsAssigned(table.getName());<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span><a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>      try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>        assertEquals(splitRows.length + 1, l.getAllRegionLocations().size());<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>      }<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>      for (byte[] splitRow : splitRows) {<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>        Put put = new Put(splitRow);<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<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>        byte[] nextRow = Bytes.copy(splitRow);<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>        nextRow[nextRow.length - 1]++;<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span><a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        put = new Put(nextRow);<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        put.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>        table.put(put);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>      }<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span><a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>      // scan forward<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        int count = 0;<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        for (Result r : scanner) {<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>          assertTrue(!r.isEmpty());<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          count++;<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        assertEquals(12, count);<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>      }<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span><a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      reverseScanTest(table, ReadType.STREAM);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>      reverseScanTest(table, ReadType.PREAD);<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>      reverseScanTest(table, ReadType.DEFAULT);<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>    }<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  }<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span><a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>  private void reverseScanTest(Table table, ReadType readType) throws IOException {<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>    // scan backward<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>    Scan scan = new Scan();<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>    scan.setReversed(true);<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>      int count = 0;<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>      byte[] lastRow = null;<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>      for (Result r : scanner) {<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>        assertTrue(!r.isEmpty());<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>        count++;<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        byte[] thisRow = r.getRow();<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        if (lastRow != null) {<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>        }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>        lastRow = thisRow;<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      }<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>      assertEquals(12, count);<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>    }<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span><a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>    scan = new Scan();<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>    scan.setReadType(readType);<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>    scan.setReversed(true);<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>    scan.withStartRow(Bytes.toBytes("002"));<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      int count = 0;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>      byte[] lastRow = null;<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>      for (Result r : scanner) {<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        assertTrue(!r.isEmpty());<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>        count++;<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>        byte[] thisRow = r.getRow();<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>        if (lastRow != null) {<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>        }<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>        lastRow = thisRow;<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>      }<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>      assertEquals(3, count); // 000 001 002<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    }<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span><a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>    scan = new Scan();<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>    scan.setReadType(readType);<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>    scan.setReversed(true);<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>    scan.withStartRow(Bytes.toBytes("002"));<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>    scan.withStopRow(Bytes.toBytes("000"));<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>      int count = 0;<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>      byte[] lastRow = null;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>      for (Result r : scanner) {<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>        assertFalse(r.isEmpty());<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>        count++;<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>        byte[] thisRow = r.getRow();<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>        if (lastRow != null) {<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>        }<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>        lastRow = thisRow;<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>      }<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>      assertEquals(2, count); // 001 002<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span><a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    scan = new Scan();<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>    scan.setReadType(readType);<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    scan.setReversed(true);<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>    scan.withStartRow(Bytes.toBytes("001"));<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>      int count = 0;<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      byte[] lastRow = null;<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      for (Result r : scanner) {<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>        assertFalse(r.isEmpty());<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>        count++;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>        byte[] thisRow = r.getRow();<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>        if (lastRow != null) {<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        }<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>        lastRow = thisRow;<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>      }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>      assertEquals(2, count); // 000 001<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span><a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>    scan = new Scan();<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    scan.setReadType(readType);<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    scan.setReversed(true);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>    scan.withStartRow(Bytes.toBytes("000"));<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      int count = 0;<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>      byte[] lastRow = null;<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>      for (Result r : scanner) {<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        assertFalse(r.isEmpty());<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        count++;<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>        byte[] thisRow = r.getRow();<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        if (lastRow != null) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>        }<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        lastRow = thisRow;<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>      assertEquals(1, count); // 000<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>    scan = new Scan();<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    scan.setReadType(readType);<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>    scan.setReversed(true);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    scan.withStartRow(Bytes.toBytes("006"));<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>    scan.withStopRow(Bytes.toBytes("002"));<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>      int count = 0;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>      byte[] lastRow = null;<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>      for (Result r : scanner) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>        assertFalse(r.isEmpty());<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>        count++;<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>        byte[] thisRow = r.getRow();<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>        if (lastRow != null) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>          assertTrue("Error scan order, last row= " + Bytes.toString(lastRow)<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>                          + ",this row=" + Bytes.toString(thisRow),<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>                  Bytes.compareTo(thisRow, lastRow) &lt; 0);<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>        }<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>        lastRow = thisRow;<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>      }<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>      assertEquals(4, count); // 003 004 005 006<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>    }<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>  }<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span><a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>  @Test<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  public void testFilterAllRecords() throws IOException {<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>    Scan scan = new Scan();<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>    scan.setBatch(1);<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>    scan.setCaching(1);<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    // Filter out any records<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>    scan.setFilter(new FilterList(new FirstKeyOnlyFilter(), new InclusiveStopFilter(new byte[0])));<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>    try (Table table = TEST_UTIL.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>      try (ResultScanner s = table.getScanner(scan)) {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>        assertNull(s.next());<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>      }<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>    }<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>  }<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span><a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  @Test<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>  public void testCellSizeLimit() throws IOException {<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    final TableName tableName = name.getTableName();<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>      .setValue(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(10 * 1024))<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>    try (Admin admin = TEST_UTIL.getAdmin()) {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>      admin.createTable(tableDescriptor);<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>    }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>    // Will succeed<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>      t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, Bytes.toBytes(0L)));<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>      t.increment(new Increment(ROW).addColumn(FAMILY, QUALIFIER, 1L));<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>    }<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>    // Will succeed<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[9*1024]));<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>    }<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>    // Will fail<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>    try (Table t = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>      try {<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>        t.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, new byte[10 * 1024]));<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>        fail("Oversize cell failed to trigger exception");<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>      } catch (IOException e) {<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>        // expected<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>      }<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>      try {<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>        t.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[2 * 1024]));<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>        fail("Oversize cell failed to trigger exception");<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>      } catch (IOException e) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>        // expected<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>    }<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>  }<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span><a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>  @Test<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>  public void testCellSizeNoLimit() throws IOException {<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    final TableName tableName = name.getTableName();<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      .setValue(HRegion.HBASE_MAX_CELL_SIZE_KEY, Integer.toString(0))<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span><a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    try (Admin admin = TEST_UTIL.getAdmin()) {<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>      admin.createTable(tableDescriptor);<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span><a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    // Will succeed<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>    try (Table ht = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>      ht.put(new Put(ROW).addColumn(FAMILY, QUALIFIER,  new byte[HRegion.DEFAULT_MAX_CELL_SIZE -<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>        1024]));<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>      ht.append(new Append(ROW).addColumn(FAMILY, QUALIFIER, new byte[1024 + 1]));<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    }<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  }<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span><a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>  @Test<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>  public void testDeleteSpecifiedVersionOfSpecifiedColumn() throws Exception {<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    final TableName tableName = name.getTableName();<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span><a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    long[] ts = {1000, 2000, 3000, 4000, 5000};<a name="line.2645"></a>
 <span class="sourceLineNo">2646</span><a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>      Put put = new Put(ROW);<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      for (int t = 0; t &lt; 4; t++) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        put.addColumn(FAMILY, QUALIFIER, ts[t], VALUES[t]);<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>      ht.put(put);<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>      Delete delete = new Delete(ROW);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      // Delete version 3000 of column FAMILY:QUALIFIER<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>      delete.addColumn(FAMILY, QUALIFIER, ts[2]);<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      ht.delete(delete);<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>      Get get = new Get(ROW);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>      Result result = ht.get(get);<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      // verify version 1000,2000,4000 remains for column FAMILY:QUALIFIER<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[3]}, new byte[][]{<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>              VALUES[0], VALUES[1], VALUES[3]}, 0, 2);<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span><a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      delete = new Delete(ROW);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>      // Delete a version 5000 of column FAMILY:QUALIFIER which didn't exist<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      delete.addColumn(FAMILY, QUALIFIER, ts[4]);<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      ht.delete(delete);<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span><a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>      get = new Get(ROW);<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      result = ht.get(get);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      // verify version 1000,2000,4000 remains for column FAMILY:QUALIFIER<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[3]}, new byte[][]{<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>              VALUES[0], VALUES[1], VALUES[3]}, 0, 2);<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>    }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  @Test<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>  public void testDeleteLatestVersionOfSpecifiedColumn() throws Exception {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>    final TableName tableName = name.getTableName();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    long[] ts = {1000, 2000, 3000, 4000, 5000};<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY, 5)) {<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      Put put = new Put(ROW);<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>      for (int t = 0; t &lt; 4; t++) {<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        put.addColumn(FAMILY, QUALIFIER, ts[t], VALUES[t]);<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>      ht.put(put);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span><a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      Delete delete = new Delete(ROW);<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      // Delete latest version of column FAMILY:QUALIFIER<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      ht.delete(delete);<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      Get get = new Get(ROW);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      Result result = ht.get(get);<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      // verify version 1000,2000,3000 remains for column FAMILY:QUALIFIER<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[2]}, new byte[][]{<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              VALUES[0], VALUES[1], VALUES[2]}, 0, 2);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span><a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>      delete = new Delete(ROW);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>      // Delete two latest version of column FAMILY:QUALIFIER<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      ht.delete(delete);<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span><a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>      get = new Get(ROW);<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      result = ht.get(get);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      // verify version 1000 remains for column FAMILY:QUALIFIER<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0]}, new byte[][]{VALUES[0]},<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>              0, 0);<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span><a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>      put = new Put(ROW);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      // Put a version 5000 of column FAMILY:QUALIFIER<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      put.addColumn(FAMILY, QUALIFIER, ts[4], VALUES[4]);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>      ht.put(put);<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span><a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>      get = new Get(ROW);<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      result = ht.get(get);<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>      // verify version 1000,5000 remains for column FAMILY:QUALIFIER<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[4]}, new byte[][]{<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              VALUES[0], VALUES[4]}, 0, 1);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>  }<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span><a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>  /**<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>   * Test for HBASE-17125<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>   */<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>  @Test<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>  public void testReadWithFilter() throws Exception {<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    final TableName tableName = name.getTableName();<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 3)) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span><a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      byte[] VALUEA = Bytes.toBytes("value-a");<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>      byte[] VALUEB = Bytes.toBytes("value-b");<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      long[] ts = {1000, 2000, 3000, 4000};<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span><a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>      Put put = new Put(ROW);<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      for (int t = 0; t &lt;= 3; t++) {<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>        if (t &lt;= 1) {<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          put.addColumn(FAMILY, QUALIFIER, ts[t], VALUEA);<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        } else {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>          put.addColumn(FAMILY, QUALIFIER, ts[t], VALUEB);<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>        }<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      }<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      table.put(put);<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      Scan scan =<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>                      new SubstringComparator("value-a")))<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>                      .readVersions(3);<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>      Result result = scanner.next();<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>              0);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span><a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      Get get =<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>              new Get(ROW)<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>                              new SubstringComparator("value-a")))<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>                      .readVersions(3);<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      result = table.get(get);<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>              0);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span><a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>      // Test with max versions 1, it should still read ts[1]<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      scan =<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>                      new SubstringComparator("value-a")))<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>                      .readVersions(1);<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      scanner = table.getScanner(scan);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      result = scanner.next();<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>              0);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span><a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      // Test with max versions 1, it should still read ts[1]<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      get =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>              new Get(ROW)<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>                              new SubstringComparator("value-a")))<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>                      .readVersions(1);<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      result = table.get(get);<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>              0);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span><a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      // Test with max versions 5, it should still read ts[1]<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      scan =<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>                      new SubstringComparator("value-a")))<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>                      .readVersions(5);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>      scanner = table.getScanner(scan);<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      result = scanner.next();<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>              0);<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span><a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      // Test with max versions 5, it should still read ts[1]<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      get =<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>              new Get(ROW)<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>                              new SubstringComparator("value-a")))<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>                      .readVersions(5);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      result = table.get(get);<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>              0);<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>    }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  }<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span><a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>  @Test<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>  public void testCellUtilTypeMethods() throws IOException {<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    final TableName tableName = name.getTableName();<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span><a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      final byte[] row = Bytes.toBytes("p");<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      Put p = new Put(row);<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      p.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      table.put(p);<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span><a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        Result result = scanner.next();<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>        assertNotNull(result);<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>        CellScanner cs = result.cellScanner();<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>        assertTrue(cs.advance());<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>        Cell c = cs.current();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>        assertTrue(CellUtil.isPut(c));<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>        assertFalse(CellUtil.isDelete(c));<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        assertFalse(cs.advance());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        assertNull(scanner.next());<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>      }<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>      Delete d = new Delete(row);<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      d.addColumn(FAMILY, QUALIFIER);<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>      table.delete(d);<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span><a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>      Scan scan = new Scan();<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      scan.setRaw(true);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>        Result result = scanner.next();<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>        assertNotNull(result);<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>        CellScanner cs = result.cellScanner();<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>        assertTrue(cs.advance());<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span><a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>        // First cell should be the delete (masking the Put)<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>        Cell c = cs.current();<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>        assertTrue("Cell should be a Delete: " + c, CellUtil.isDelete(c));<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>        assertFalse("Cell should not be a Put: " + c, CellUtil.isPut(c));<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span><a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        // Second cell should be the original Put<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        assertTrue(cs.advance());<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        c = cs.current();<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>        assertFalse("Cell should not be a Delete: " + c, CellUtil.isDelete(c));<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>        assertTrue("Cell should be a Put: " + c, CellUtil.isPut(c));<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span><a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        // No more cells in this row<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>        assertFalse(cs.advance());<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>        // No more results in this scan<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>        assertNull(scanner.next());<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      }<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>    }<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  @Test(expected = DoNotRetryIOException.class)<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>  public void testCreateTableWithZeroRegionReplicas() throws Exception {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>    TableName tableName = name.getTableName();<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(Bytes.toBytes("cf")))<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>        .setRegionReplication(0)<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>        .build();<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span><a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Test(expected = DoNotRetryIOException.class)<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public void testModifyTableWithZeroRegionReplicas() throws Exception {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    TableName tableName = name.getTableName();<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(Bytes.toBytes("cf")))<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>        .build();<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span><a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>    TableDescriptor newDesc = TableDescriptorBuilder.newBuilder(desc)<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>        .setRegionReplication(0)<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>        .build();<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span><a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    TEST_UTIL.getAdmin().modifyTable(newDesc);<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  @Test(timeout = 60000)<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>  public void testModifyTableWithMemstoreData() throws Exception {<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    TableName tableName = name.getTableName();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>    createTableAndValidateTableSchemaModification(tableName, true);<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  }<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span><a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>  @Test(timeout = 60000)<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public void testDeleteCFWithMemstoreData() throws Exception {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    TableName tableName = name.getTableName();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    createTableAndValidateTableSchemaModification(tableName, false);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<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>   * Create table and validate online schema modification<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>   * @param tableName Table name<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>   * @param modifyTable Modify table if true otherwise delete column family<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>   * @throws IOException in case of failures<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>   */<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void createTableAndValidateTableSchemaModification(TableName tableName,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      boolean modifyTable) throws Exception {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    // Create table with two Cfs<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    byte[] cf1 = Bytes.toBytes("cf1");<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    byte[] cf2 = Bytes.toBytes("cf2");<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(cf1))<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(cf2)).build();<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    admin.createTable(tableDesc);<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span><a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>    Table t = TEST_UTIL.getConnection().getTable(tableName);<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // Insert few records and flush the table<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    t.put(new Put(ROW).addColumn(cf1, QUALIFIER, Bytes.toBytes("val1")));<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    t.put(new Put(ROW).addColumn(cf2, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    admin.flush(tableName);<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>    Path tableDir = CommonFSUtils.getTableDir(TEST_UTIL.getDefaultRootDirPath(), tableName);<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    List&lt;Path&gt; regionDirs = FSUtils.getRegionDirs(TEST_UTIL.getTestFileSystem(), tableDir);<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    assertEquals(1, regionDirs.size());<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(TEST_UTIL.getTestFileSystem(), regionDirs.get(0));<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    assertEquals(2, familyDirs.size());<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span><a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>    // Insert record but dont flush the table<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    t.put(new Put(ROW).addColumn(cf1, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    t.put(new Put(ROW).addColumn(cf2, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span><a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    if (modifyTable) {<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>      tableDesc = TableDescriptorBuilder.newBuilder(tableDesc).removeColumnFamily(cf2).build();<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>      admin.modifyTable(tableDesc);<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    } else {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      admin.deleteColumnFamily(tableName, cf2);<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    // After table modification or delete family there should be only one CF in FS<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    familyDirs = FSUtils.getFamilyDirs(TEST_UTIL.getTestFileSystem(), regionDirs.get(0));<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>    assertEquals("CF dir count should be 1, but was " + familyDirs.size(), 1, familyDirs.size());<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">2647</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY, 5)) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span><a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      Put put = new Put(ROW);<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      for (int t = 0; t &lt; 4; t++) {<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>        put.addColumn(FAMILY, QUALIFIER, ts[t], VALUES[t]);<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>      }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      ht.put(put);<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span><a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>      Delete delete = new Delete(ROW);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>      // Delete version 3000 of column FAMILY:QUALIFIER<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      delete.addColumn(FAMILY, QUALIFIER, ts[2]);<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>      ht.delete(delete);<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span><a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>      Get get = new Get(ROW);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>      Result result = ht.get(get);<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>      // verify version 1000,2000,4000 remains for column FAMILY:QUALIFIER<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[3]}, new byte[][]{<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>              VALUES[0], VALUES[1], VALUES[3]}, 0, 2);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span><a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      delete = new Delete(ROW);<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      // Delete a version 5000 of column FAMILY:QUALIFIER which didn't exist<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>      delete.addColumn(FAMILY, QUALIFIER, ts[4]);<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>      ht.delete(delete);<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span><a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>      get = new Get(ROW);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>      result = ht.get(get);<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>      // verify version 1000,2000,4000 remains for column FAMILY:QUALIFIER<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[3]}, new byte[][]{<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>              VALUES[0], VALUES[1], VALUES[3]}, 0, 2);<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>    }<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  }<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span><a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>  @Test<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  public void testDeleteLatestVersionOfSpecifiedColumn() throws Exception {<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    final TableName tableName = name.getTableName();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>    byte[][] VALUES = makeN(VALUE, 5);<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>    long[] ts = {1000, 2000, 3000, 4000, 5000};<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>    try (Table ht = TEST_UTIL.createTable(tableName, FAMILY, 5)) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>      Put put = new Put(ROW);<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>      for (int t = 0; t &lt; 4; t++) {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>        put.addColumn(FAMILY, QUALIFIER, ts[t], VALUES[t]);<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>      }<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>      ht.put(put);<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span><a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      Delete delete = new Delete(ROW);<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>      // Delete latest version of column FAMILY:QUALIFIER<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>      ht.delete(delete);<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span><a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>      Get get = new Get(ROW);<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      Result result = ht.get(get);<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>      // verify version 1000,2000,3000 remains for column FAMILY:QUALIFIER<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[1], ts[2]}, new byte[][]{<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>              VALUES[0], VALUES[1], VALUES[2]}, 0, 2);<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      delete = new Delete(ROW);<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>      // Delete two latest version of column FAMILY:QUALIFIER<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>      delete.addColumn(FAMILY, QUALIFIER);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>      ht.delete(delete);<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span><a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>      get = new Get(ROW);<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>      result = ht.get(get);<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>      // verify version 1000 remains for column FAMILY:QUALIFIER<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0]}, new byte[][]{VALUES[0]},<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>              0, 0);<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>      put = new Put(ROW);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>      // Put a version 5000 of column FAMILY:QUALIFIER<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>      put.addColumn(FAMILY, QUALIFIER, ts[4], VALUES[4]);<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>      ht.put(put);<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span><a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>      get = new Get(ROW);<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>      get.addColumn(FAMILY, QUALIFIER);<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>      get.readVersions(Integer.MAX_VALUE);<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>      result = ht.get(get);<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>      // verify version 1000,5000 remains for column FAMILY:QUALIFIER<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[0], ts[4]}, new byte[][]{<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              VALUES[0], VALUES[4]}, 0, 1);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>    }<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>  }<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span><a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>  /**<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>   * Test for HBASE-17125<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>   */<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>  @Test<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>  public void testReadWithFilter() throws Exception {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    final TableName tableName = name.getTableName();<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 3)) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span><a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>      byte[] VALUEA = Bytes.toBytes("value-a");<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>      byte[] VALUEB = Bytes.toBytes("value-b");<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>      long[] ts = {1000, 2000, 3000, 4000};<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span><a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>      Put put = new Put(ROW);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>      // Put version 1000,2000,3000,4000 of column FAMILY:QUALIFIER<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>      for (int t = 0; t &lt;= 3; t++) {<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>        if (t &lt;= 1) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>          put.addColumn(FAMILY, QUALIFIER, ts[t], VALUEA);<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>        } else {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>          put.addColumn(FAMILY, QUALIFIER, ts[t], VALUEB);<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>      }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>      table.put(put);<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span><a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      Scan scan =<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>                      new SubstringComparator("value-a")))<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>                      .readVersions(3);<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>      Result result = scanner.next();<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>              0);<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span><a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>      Get get =<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>              new Get(ROW)<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>                              new SubstringComparator("value-a")))<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>                      .readVersions(3);<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>      result = table.get(get);<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>              0);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span><a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>      // Test with max versions 1, it should still read ts[1]<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>      scan =<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>                      new SubstringComparator("value-a")))<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>                      .readVersions(1);<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      scanner = table.getScanner(scan);<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      result = scanner.next();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>              0);<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      // Test with max versions 1, it should still read ts[1]<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      get =<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>              new Get(ROW)<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>                              new SubstringComparator("value-a")))<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>                      .readVersions(1);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      result = table.get(get);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>              0);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span><a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      // Test with max versions 5, it should still read ts[1]<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      scan =<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>              new Scan().setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>                      new SubstringComparator("value-a")))<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>                      .readVersions(5);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>      scanner = table.getScanner(scan);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>      result = scanner.next();<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>              0);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span><a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      // Test with max versions 5, it should still read ts[1]<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      get =<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>              new Get(ROW)<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>                      .setFilter(new ValueFilter(CompareOperator.EQUAL,<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>                              new SubstringComparator("value-a")))<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>                      .readVersions(5);<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>      result = table.get(get);<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      // ts[0] has gone from user view. Only read ts[2] which value is less or equal to 3<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      assertNResult(result, ROW, FAMILY, QUALIFIER, new long[]{ts[1]}, new byte[][]{VALUEA}, 0,<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>              0);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>  }<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span><a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  @Test<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  public void testCellUtilTypeMethods() throws IOException {<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>    final TableName tableName = name.getTableName();<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span><a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>      final byte[] row = Bytes.toBytes("p");<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      Put p = new Put(row);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>      p.addColumn(FAMILY, QUALIFIER, VALUE);<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      table.put(p);<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span><a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      try (ResultScanner scanner = table.getScanner(new Scan())) {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>        Result result = scanner.next();<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        assertNotNull(result);<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>        CellScanner cs = result.cellScanner();<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        assertTrue(cs.advance());<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>        Cell c = cs.current();<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>        assertTrue(CellUtil.isPut(c));<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>        assertFalse(CellUtil.isDelete(c));<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>        assertFalse(cs.advance());<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>        assertNull(scanner.next());<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>      }<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span><a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>      Delete d = new Delete(row);<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>      d.addColumn(FAMILY, QUALIFIER);<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>      table.delete(d);<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span><a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>      Scan scan = new Scan();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>      scan.setRaw(true);<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        Result result = scanner.next();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        assertNotNull(result);<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>        CellScanner cs = result.cellScanner();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        assertTrue(cs.advance());<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span><a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>        // First cell should be the delete (masking the Put)<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>        Cell c = cs.current();<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>        assertTrue("Cell should be a Delete: " + c, CellUtil.isDelete(c));<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>        assertFalse("Cell should not be a Put: " + c, CellUtil.isPut(c));<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>        // Second cell should be the original Put<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>        assertTrue(cs.advance());<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>        c = cs.current();<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>        assertFalse("Cell should not be a Delete: " + c, CellUtil.isDelete(c));<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>        assertTrue("Cell should be a Put: " + c, CellUtil.isPut(c));<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span><a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>        // No more cells in this row<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>        assertFalse(cs.advance());<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span><a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>        // No more results in this scan<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>        assertNull(scanner.next());<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    }<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span><a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>  @Test(expected = DoNotRetryIOException.class)<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public void testCreateTableWithZeroRegionReplicas() throws Exception {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    TableName tableName = name.getTableName();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(Bytes.toBytes("cf")))<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>        .setRegionReplication(0)<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>        .build();<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span><a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  }<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span><a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>  @Test(expected = DoNotRetryIOException.class)<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>  public void testModifyTableWithZeroRegionReplicas() throws Exception {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>    TableName tableName = name.getTableName();<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(Bytes.toBytes("cf")))<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>        .build();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span><a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    TableDescriptor newDesc = TableDescriptorBuilder.newBuilder(desc)<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>        .setRegionReplication(0)<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>        .build();<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span><a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    TEST_UTIL.getAdmin().modifyTable(newDesc);<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span><a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>  @Test(timeout = 60000)<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public void testModifyTableWithMemstoreData() throws Exception {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    TableName tableName = name.getTableName();<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    createTableAndValidateTableSchemaModification(tableName, true);<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>  }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>  @Test(timeout = 60000)<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  public void testDeleteCFWithMemstoreData() throws Exception {<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>    TableName tableName = name.getTableName();<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    createTableAndValidateTableSchemaModification(tableName, false);<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span><a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>  /**<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>   * Create table and validate online schema modification<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * @param tableName Table name<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * @param modifyTable Modify table if true otherwise delete column family<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * @throws IOException in case of failures<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  private void createTableAndValidateTableSchemaModification(TableName tableName,<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>      boolean modifyTable) throws Exception {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>    // Create table with two Cfs<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    byte[] cf1 = Bytes.toBytes("cf1");<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>    byte[] cf2 = Bytes.toBytes("cf2");<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(tableName)<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(cf1))<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(cf2)).build();<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>    admin.createTable(tableDesc);<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>    Table t = TEST_UTIL.getConnection().getTable(tableName);<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>    // Insert few records and flush the table<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    t.put(new Put(ROW).addColumn(cf1, QUALIFIER, Bytes.toBytes("val1")));<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>    t.put(new Put(ROW).addColumn(cf2, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>    admin.flush(tableName);<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>    Path tableDir = CommonFSUtils.getTableDir(TEST_UTIL.getDefaultRootDirPath(), tableName);<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    List&lt;Path&gt; regionDirs = FSUtils.getRegionDirs(TEST_UTIL.getTestFileSystem(), tableDir);<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>    assertEquals(1, regionDirs.size());<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>    List&lt;Path&gt; familyDirs = FSUtils.getFamilyDirs(TEST_UTIL.getTestFileSystem(), regionDirs.get(0));<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    assertEquals(2, familyDirs.size());<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // Insert record but dont flush the table<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    t.put(new Put(ROW).addColumn(cf1, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    t.put(new Put(ROW).addColumn(cf2, QUALIFIER, Bytes.toBytes("val2")));<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    if (modifyTable) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      tableDesc = TableDescriptorBuilder.newBuilder(tableDesc).removeColumnFamily(cf2).build();<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      admin.modifyTable(tableDesc);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    } else {<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>      admin.deleteColumnFamily(tableName, cf2);<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    }<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    // After table modification or delete family there should be only one CF in FS<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>    familyDirs = FSUtils.getFamilyDirs(TEST_UTIL.getTestFileSystem(), regionDirs.get(0));<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>    assertEquals("CF dir count should be 1, but was " + familyDirs.size(), 1, familyDirs.size());<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>  }<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>}<a name="line.2962"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html
index 7172771..382503c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestImmutableScan.html
@@ -27,73 +27,73 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>package org.apache.hadoop.hbase.client;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.lang.reflect.InvocationTargetException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.lang.reflect.Method;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.lang3.builder.EqualsBuilder;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.security.visibility.Authorizations;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.junit.ClassRule;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.mockito.Mockito;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.slf4j.Logger;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.LoggerFactory;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import static org.junit.Assert.assertArrayEquals;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import static org.junit.Assert.assertEquals;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * Small tests for ImmutableScan<a name="line.46"></a>
-<span class="sourceLineNo">047</span> */<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@Category({ ClientTests.class, SmallTests.class })<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class TestImmutableScan {<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @ClassRule<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    HBaseClassTestRule.forClass(TestImmutableScan.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(TestImmutableScan.class);<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  @Test<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public void testScanCopyConstructor() throws Exception {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    Scan scan = new Scan();<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>    scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("q"))<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      .setACL("test_user2", new Permission(Permission.Action.READ))<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      .setAllowPartialResults(true)<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      .setAsyncPrefetch(false)<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      .setAttribute("test_key", Bytes.toBytes("test_value"))<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      .setAuthorizations(new Authorizations("test_label"))<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      .setBatch(10)<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      .setCacheBlocks(false)<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      .setCaching(10)<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      .setConsistency(Consistency.TIMELINE)<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      .setFilter(new FilterList())<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      .setId("scan_copy_constructor")<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      .setLimit(100)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      .setLoadColumnFamiliesOnDemand(false)<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      .setMaxResultSize(100)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      .setMaxResultsPerColumnFamily(1000)<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      .readVersions(9999)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      .setMvccReadPoint(5)<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      .setNeedCursorResult(true)<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      .setPriority(1)<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      .setRaw(true)<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      .setReplicaId(3)<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      .setReversed(true)<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      .setRowOffsetPerColumnFamily(5)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      .setRowPrefixFilter(Bytes.toBytes("row_"))<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      .setScanMetricsEnabled(true)<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      .setSmall(true)<a name="line.88"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertArrayEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertEquals;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.lang.reflect.InvocationTargetException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.reflect.Method;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.lang3.builder.EqualsBuilder;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.security.visibility.Authorizations;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.mockito.Mockito;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Small tests for ImmutableScan<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@Category({ ClientTests.class, SmallTests.class })<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class TestImmutableScan {<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  @ClassRule<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    HBaseClassTestRule.forClass(TestImmutableScan.class);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(TestImmutableScan.class);<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @Test<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public void testScanCopyConstructor() throws Exception {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    Scan scan = new Scan();<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>    scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("q"))<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      .setACL("test_user2", new Permission(Permission.Action.READ))<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      .setAllowPartialResults(true)<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      .setAsyncPrefetch(false)<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      .setAttribute("test_key", Bytes.toBytes("test_value"))<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      .setAuthorizations(new Authorizations("test_label"))<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      .setBatch(10)<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      .setCacheBlocks(false)<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      .setCaching(10)<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      .setConsistency(Consistency.TIMELINE)<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      .setFilter(new FilterList())<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      .setId("scan_copy_constructor")<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      .setLimit(100)<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      .setLoadColumnFamiliesOnDemand(false)<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      .setMaxResultSize(100)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      .setMaxResultsPerColumnFamily(1000)<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      .readVersions(9999)<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      .setMvccReadPoint(5)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      .setNeedCursorResult(true)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      .setPriority(1)<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      .setRaw(true)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      .setReplicaId(3)<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      .setReversed(true)<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      .setRowOffsetPerColumnFamily(5)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      .setRowPrefixFilter(Bytes.toBytes("row_"))<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      .setScanMetricsEnabled(true)<a name="line.88"></a>
 <span class="sourceLineNo">089</span>      .setReadType(Scan.ReadType.STREAM)<a name="line.89"></a>
 <span class="sourceLineNo">090</span>      .withStartRow(Bytes.toBytes("row_1"))<a name="line.90"></a>
 <span class="sourceLineNo">091</span>      .withStopRow(Bytes.toBytes("row_2"))<a name="line.91"></a>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html
new file mode 100644
index 0000000..b4ecb55
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestPreadReversedScanner.html
@@ -0,0 +1,217 @@
+<!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.client;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.TableName;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.junit.After;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.junit.AfterClass;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.junit.Assert;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.BeforeClass;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.ClassRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.Test;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.experimental.categories.Category;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.slf4j.Logger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.LoggerFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>@Category(MediumTests.class)<a name="line.37"></a>
+<span class="sourceLineNo">038</span>public class TestPreadReversedScanner {<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  @ClassRule<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.41"></a>
+<span class="sourceLineNo">042</span>      HBaseClassTestRule.forClass(TestPreadReversedScanner.class);<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public static final Logger LOG = LoggerFactory.getLogger(TestPreadReversedScanner.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final TableName TABLE_NAME = TableName.valueOf("testPreadSmall");<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final byte[] COLUMN_FAMILY = Bytes.toBytes("columnFamily");<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static Table htable = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  @BeforeClass<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static void setUpBeforeClass() throws Exception {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    TEST_UTIL.startMiniCluster(1);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // create a table with 4 region: (-oo, b),[b,c),[c,d),[d,+oo)<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    byte[] bytes = Bytes.toBytes("bcd");<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    byte[][] splitKeys = new byte[bytes.length][];<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    for (int i = 0; i &lt; bytes.length; i++) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      splitKeys[i] = new byte[] { bytes[i] };<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    htable = TEST_UTIL.createTable(TABLE_NAME, COLUMN_FAMILY, splitKeys);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @AfterClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void tearDownAfterClass() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @After<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public void tearDown() throws IOException {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    TEST_UTIL.truncateTable(TABLE_NAME);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * all rowKeys are fit in the last region.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Test<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void testPreadReversedScan01() throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    String[][] keysCases = new String[][] {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      { "d0", "d1", "d2", "d3" }, // all rowKeys fit in the last region.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      { "a0", "a1", "a2", "a3" }, // all rowKeys fit in the first region.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      { "a0", "b1", "c2", "d3" }, // each region with a rowKey<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    };<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>    for (int caseIndex = 0; caseIndex &lt; keysCases.length; caseIndex++) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      testPreadReversedScanInternal(keysCases[caseIndex]);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      TEST_UTIL.truncateTable(TABLE_NAME);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private void testPreadReversedScanInternal(String[] inputRowKeys) throws IOException {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    int rowCount = inputRowKeys.length;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    for (int i = 0; i &lt; rowCount; i++) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      Put put = new Put(Bytes.toBytes(inputRowKeys[i]));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      put.addColumn(COLUMN_FAMILY, null, Bytes.toBytes(i));<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      htable.put(put);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    Scan scan = new Scan();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    scan.setReversed(true);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    scan.setReadType(ReadType.PREAD);<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>    ResultScanner scanner = htable.getScanner(scan);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    Result r;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    int value = rowCount;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    while ((r = scanner.next()) != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      Assert.assertArrayEquals(r.getValue(COLUMN_FAMILY, null), Bytes.toBytes(--value));<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      Assert.assertArrayEquals(r.getRow(), Bytes.toBytes(inputRowKeys[value]));<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    Assert.assertEquals(0, value);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * Corner case:<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * &lt;p/&gt;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * region (-oo,b) . test whether reversed pread scanner will return infinity results with<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * RowKey={0x00}.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  @Test<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public void testSmallReversedScan02() throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Put put = new Put(new byte[] { (char) 0x00 });<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    put.addColumn(COLUMN_FAMILY, null, Bytes.toBytes(0));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    htable.put(put);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    Scan scan = new Scan();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    scan.setCaching(1);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    scan.setReversed(true);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    scan.setReadType(ReadType.PREAD);<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    ResultScanner scanner = htable.getScanner(scan);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    Result r;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    int count = 1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    while ((r = scanner.next()) != null) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      Assert.assertArrayEquals(r.getValue(COLUMN_FAMILY, null), Bytes.toBytes(0));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      Assert.assertArrayEquals(r.getRow(), new byte[] { (char) 0x00 });<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      Assert.assertTrue(--count &gt;= 0);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Assert.assertEquals(0, count);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>}<a name="line.145"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScan.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScan.html
index 2e64702..cfdf08b 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScan.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScan.html
@@ -26,293 +26,288 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.fail;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.commons.lang3.builder.EqualsBuilder;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HConstants;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.security.visibility.Authorizations;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.Assert;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>// TODO: cover more test cases<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@Category({ClientTests.class, SmallTests.class})<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public class TestScan {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      HBaseClassTestRule.forClass(TestScan.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @Test<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  public void testAttributesSerialization() throws IOException {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    Scan scan = new Scan();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    scan.setAttribute("attribute1", Bytes.toBytes("value1"));<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    scan.setAttribute("attribute2", Bytes.toBytes("value2"));<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    scan.setAttribute("attribute3", Bytes.toBytes("value3"));<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>    ClientProtos.Scan scanProto = ProtobufUtil.toScan(scan);<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    Scan scan2 = ProtobufUtil.toScan(scanProto);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>    Assert.assertNull(scan2.getAttribute("absent"));<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan2.getAttribute("attribute1")));<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan2.getAttribute("attribute2")));<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), scan2.getAttribute("attribute3")));<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    Assert.assertEquals(3, scan2.getAttributesMap().size());<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  @Test<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public void testGetToScan() throws Exception {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    Get get = new Get(Bytes.toBytes(1));<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    get.setCacheBlocks(true)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>            .setConsistency(Consistency.TIMELINE)<a name="line.75"></a>
-<span class="sourceLineNo">076</span>            .setFilter(new FilterList())<a name="line.76"></a>
-<span class="sourceLineNo">077</span>            .setId("get")<a name="line.77"></a>
-<span class="sourceLineNo">078</span>            .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>            .setLoadColumnFamiliesOnDemand(false)<a name="line.79"></a>
-<span class="sourceLineNo">080</span>            .setMaxResultsPerColumnFamily(1000)<a name="line.80"></a>
-<span class="sourceLineNo">081</span>            .readVersions(9999)<a name="line.81"></a>
-<span class="sourceLineNo">082</span>            .setRowOffsetPerColumnFamily(5)<a name="line.82"></a>
-<span class="sourceLineNo">083</span>            .setTimeRange(0, 13)<a name="line.83"></a>
-<span class="sourceLineNo">084</span>            .setAttribute("att_v0", Bytes.toBytes("att_v0"))<a name="line.84"></a>
-<span class="sourceLineNo">085</span>            .setColumnFamilyTimeRange(Bytes.toBytes("cf"), 0, 123)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>            .setReplicaId(3)<a name="line.86"></a>
-<span class="sourceLineNo">087</span>            .setACL("test_user", new Permission(Permission.Action.READ))<a name="line.87"></a>
-<span class="sourceLineNo">088</span>            .setAuthorizations(new Authorizations("test_label"))<a name="line.88"></a>
-<span class="sourceLineNo">089</span>            .setPriority(3);<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Scan scan = new Scan(get);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    assertEquals(get.getCacheBlocks(), scan.getCacheBlocks());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    assertEquals(get.getConsistency(), scan.getConsistency());<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    assertEquals(get.getFilter(), scan.getFilter());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    assertEquals(get.getId(), scan.getId());<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertEquals(get.getIsolationLevel(), scan.getIsolationLevel());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    assertEquals(get.getLoadColumnFamiliesOnDemandValue(),<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        scan.getLoadColumnFamiliesOnDemandValue());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    assertEquals(get.getMaxResultsPerColumnFamily(), scan.getMaxResultsPerColumnFamily());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    assertEquals(get.getMaxVersions(), scan.getMaxVersions());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    assertEquals(get.getRowOffsetPerColumnFamily(), scan.getRowOffsetPerColumnFamily());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    assertEquals(get.getTimeRange().getMin(), scan.getTimeRange().getMin());<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertEquals(get.getTimeRange().getMax(), scan.getTimeRange().getMax());<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    assertTrue(Bytes.equals(get.getAttribute("att_v0"), scan.getAttribute("att_v0")));<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin(),<a name="line.105"></a>
-<span class="sourceLineNo">106</span>            scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax(),<a name="line.107"></a>
-<span class="sourceLineNo">108</span>            scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    assertEquals(get.getReplicaId(), scan.getReplicaId());<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assertEquals(get.getACL(), scan.getACL());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    assertEquals(get.getAuthorizations().getLabels(), scan.getAuthorizations().getLabels());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    assertEquals(get.getPriority(), scan.getPriority());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Test<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public void testScanAttributes() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    Scan scan = new Scan();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    Assert.assertNull(scan.getAttribute("absent"));<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    scan.setAttribute("absent", null);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    Assert.assertNull(scan.getAttribute("absent"));<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // adding attribute<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    scan.setAttribute("attribute1", Bytes.toBytes("value1"));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan.getAttribute("attribute1")));<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"),<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        scan.getAttributesMap().get("attribute1")));<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // overriding attribute value<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    scan.setAttribute("attribute1", Bytes.toBytes("value12"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), scan.getAttribute("attribute1")));<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        scan.getAttributesMap().get("attribute1")));<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // adding another attribute<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    scan.setAttribute("attribute2", Bytes.toBytes("value2"));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan.getAttribute("attribute2")));<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Assert.assertEquals(2, scan.getAttributesMap().size());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"),<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        scan.getAttributesMap().get("attribute2")));<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // removing attribute<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    scan.setAttribute("attribute2", null);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    Assert.assertNull(scan.getAttribute("attribute2"));<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    Assert.assertNull(scan.getAttributesMap().get("attribute2"));<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // removing non-existed attribute<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    scan.setAttribute("attribute2", null);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    Assert.assertNull(scan.getAttribute("attribute2"));<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Assert.assertNull(scan.getAttributesMap().get("attribute2"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    // removing another attribute<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    scan.setAttribute("attribute1", null);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    Assert.assertNull(scan.getAttribute("attribute1"));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    Assert.assertNull(scan.getAttributesMap().get("attribute1"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  @Test<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public void testNullQualifier() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    Scan scan = new Scan();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    byte[] family = Bytes.toBytes("family");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    scan.addColumn(family, null);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Set&lt;byte[]&gt; qualifiers = scan.getFamilyMap().get(family);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    Assert.assertEquals(1, qualifiers.size());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Test<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public void testSetAuthorizations() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Scan scan = new Scan();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    try {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      scan.setAuthorizations(new Authorizations("\u002b|\u0029"));<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      scan.setAuthorizations(new Authorizations("A", "B", "0123", "A0", "1A1", "_a"));<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      scan.setAuthorizations(new Authorizations("A|B"));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      scan.setAuthorizations(new Authorizations("A&amp;B"));<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      scan.setAuthorizations(new Authorizations("!B"));<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      scan.setAuthorizations(new Authorizations("A", "(A)"));<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      scan.setAuthorizations(new Authorizations("A", "{A"));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      scan.setAuthorizations(new Authorizations(" "));<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      scan.setAuthorizations(new Authorizations(":B"));<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      scan.setAuthorizations(new Authorizations("-B"));<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      scan.setAuthorizations(new Authorizations(".B"));<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      scan.setAuthorizations(new Authorizations("/B"));<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (IllegalArgumentException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      fail("should not throw exception");<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  @Test<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public void testSetStartRowAndSetStopRow() {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    Scan scan = new Scan();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    scan.withStartRow(null);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    scan.withStartRow(new byte[1]);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    scan.withStartRow(new byte[HConstants.MAX_ROW_LENGTH]);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      scan.withStartRow(new byte[HConstants.MAX_ROW_LENGTH+1]);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      fail("should've thrown exception");<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } catch (IllegalArgumentException iae) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } catch (Exception e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      fail("expected IllegalArgumentException to be thrown");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    scan.withStopRow(null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    scan.withStopRow(new byte[1]);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    scan.withStopRow(new byte[HConstants.MAX_ROW_LENGTH]);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      scan.withStopRow(new byte[HConstants.MAX_ROW_LENGTH+1]);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      fail("should've thrown exception");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    } catch (IllegalArgumentException iae) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    } catch (Exception e) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      fail("expected IllegalArgumentException to be thrown");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  @Test<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void testScanCopyConstructor() throws Exception {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Scan scan = new Scan();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("q"))<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        .setACL("test_user", new Permission(Permission.Action.READ))<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        .setAllowPartialResults(true)<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        .setAsyncPrefetch(false)<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        .setAttribute("test_key", Bytes.toBytes("test_value"))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        .setAuthorizations(new Authorizations("test_label"))<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        .setBatch(10)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        .setCacheBlocks(false)<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        .setCaching(10)<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        .setConsistency(Consistency.TIMELINE)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        .setFilter(new FilterList())<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        .setId("scan_copy_constructor")<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        .setLimit(100)<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        .setLoadColumnFamiliesOnDemand(false)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        .setMaxResultSize(100)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .setMaxResultsPerColumnFamily(1000)<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .readVersions(9999)<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .setMvccReadPoint(5)<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        .setNeedCursorResult(true)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        .setPriority(1)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        .setRaw(true)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .setReplicaId(3)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        .setReversed(true)<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .setRowOffsetPerColumnFamily(5)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        .setRowPrefixFilter(Bytes.toBytes("row_"))<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .setScanMetricsEnabled(true)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        .setSmall(true)<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        .setReadType(ReadType.STREAM)<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .withStartRow(Bytes.toBytes("row_1"))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .withStopRow(Bytes.toBytes("row_2"))<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .setTimeRange(0, 13);<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // create a copy of existing scan object<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    Scan scanCopy = new Scan(scan);<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // validate fields of copied scan object match with the original scan object<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertEquals(scan.getACL(), scanCopy.getACL());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    assertEquals(scan.getAllowPartialResults(), scanCopy.getAllowPartialResults());<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    assertEquals(scan.getAttribute("test_key"), scanCopy.getAttribute("test_key"));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    assertEquals(scan.getAttributeSize(), scanCopy.getAttributeSize());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    assertEquals(scan.getAttributesMap(), scanCopy.getAttributesMap());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    assertEquals(scan.getAuthorizations().getLabels(), scanCopy.getAuthorizations().getLabels());<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    assertEquals(scan.getBatch(), scanCopy.getBatch());<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    assertEquals(scan.getCacheBlocks(), scanCopy.getCacheBlocks());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    assertEquals(scan.getCaching(), scanCopy.getCaching());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertEquals(scan.getConsistency(), scanCopy.getConsistency());<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertEquals(scan.getFamilies().length, scanCopy.getFamilies().length);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertEquals(scan.getFamilies()[0], scanCopy.getFamilies()[0]);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertEquals(scan.getFamilyMap(), scanCopy.getFamilyMap());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertEquals(scan.getFilter(), scanCopy.getFilter());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertEquals(scan.getId(), scanCopy.getId());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertEquals(scan.getIsolationLevel(), scanCopy.getIsolationLevel());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertEquals(scan.getLimit(), scanCopy.getLimit());<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertEquals(scan.getLoadColumnFamiliesOnDemandValue(),<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      scanCopy.getLoadColumnFamiliesOnDemandValue());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    assertEquals(scan.getMaxResultSize(), scanCopy.getMaxResultSize());<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    assertEquals(scan.getMaxResultsPerColumnFamily(), scanCopy.getMaxResultsPerColumnFamily());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    assertEquals(scan.getMaxVersions(), scanCopy.getMaxVersions());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    assertEquals(scan.getMvccReadPoint(), scanCopy.getMvccReadPoint());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assertEquals(scan.getPriority(), scanCopy.getPriority());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertEquals(scan.getReadType(), scanCopy.getReadType());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertEquals(scan.getReplicaId(), scanCopy.getReplicaId());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    assertEquals(scan.getRowOffsetPerColumnFamily(), scanCopy.getRowOffsetPerColumnFamily());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertEquals(scan.getStartRow(), scanCopy.getStartRow());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    assertEquals(scan.getStopRow(), scanCopy.getStopRow());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    assertEquals(scan.getTimeRange(), scanCopy.getTimeRange());<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    assertTrue("Make sure copy constructor adds all the fields in the copied object",<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      EqualsBuilder.reflectionEquals(scan, scanCopy));<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  @Test<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  public void testScanReadType() throws Exception {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    Scan scan = new Scan();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    assertFalse(scan.isSmall());<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    assertEquals(ReadType.DEFAULT, scan.getReadType());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Scan copyScan = new Scan(scan);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    copyScan.setSmall(scan.isSmall());<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    assertFalse(copyScan.isSmall());<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    assertEquals(ReadType.DEFAULT, copyScan.getReadType());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>}<a name="line.307"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><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.util.Arrays;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Set;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.lang3.builder.EqualsBuilder;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.security.visibility.Authorizations;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.Assert;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.ClassRule;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>// TODO: cover more test cases<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@Category({ClientTests.class, SmallTests.class})<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TestScan {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      HBaseClassTestRule.forClass(TestScan.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  @Test<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public void testAttributesSerialization() throws IOException {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    Scan scan = new Scan();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    scan.setAttribute("attribute1", Bytes.toBytes("value1"));<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    scan.setAttribute("attribute2", Bytes.toBytes("value2"));<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    scan.setAttribute("attribute3", Bytes.toBytes("value3"));<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    ClientProtos.Scan scanProto = ProtobufUtil.toScan(scan);<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>    Scan scan2 = ProtobufUtil.toScan(scanProto);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>    Assert.assertNull(scan2.getAttribute("absent"));<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan2.getAttribute("attribute1")));<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan2.getAttribute("attribute2")));<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), scan2.getAttribute("attribute3")));<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    Assert.assertEquals(3, scan2.getAttributesMap().size());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @Test<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public void testGetToScan() throws Exception {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    Get get = new Get(Bytes.toBytes(1));<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    get.setCacheBlocks(true)<a name="line.73"></a>
+<span class="sourceLineNo">074</span>            .setConsistency(Consistency.TIMELINE)<a name="line.74"></a>
+<span class="sourceLineNo">075</span>            .setFilter(new FilterList())<a name="line.75"></a>
+<span class="sourceLineNo">076</span>            .setId("get")<a name="line.76"></a>
+<span class="sourceLineNo">077</span>            .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>            .setLoadColumnFamiliesOnDemand(false)<a name="line.78"></a>
+<span class="sourceLineNo">079</span>            .setMaxResultsPerColumnFamily(1000)<a name="line.79"></a>
+<span class="sourceLineNo">080</span>            .readVersions(9999)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>            .setRowOffsetPerColumnFamily(5)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>            .setTimeRange(0, 13)<a name="line.82"></a>
+<span class="sourceLineNo">083</span>            .setAttribute("att_v0", Bytes.toBytes("att_v0"))<a name="line.83"></a>
+<span class="sourceLineNo">084</span>            .setColumnFamilyTimeRange(Bytes.toBytes("cf"), 0, 123)<a name="line.84"></a>
+<span class="sourceLineNo">085</span>            .setReplicaId(3)<a name="line.85"></a>
+<span class="sourceLineNo">086</span>            .setACL("test_user", new Permission(Permission.Action.READ))<a name="line.86"></a>
+<span class="sourceLineNo">087</span>            .setAuthorizations(new Authorizations("test_label"))<a name="line.87"></a>
+<span class="sourceLineNo">088</span>            .setPriority(3);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    Scan scan = new Scan(get);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    assertEquals(get.getCacheBlocks(), scan.getCacheBlocks());<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    assertEquals(get.getConsistency(), scan.getConsistency());<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    assertEquals(get.getFilter(), scan.getFilter());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    assertEquals(get.getId(), scan.getId());<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertEquals(get.getIsolationLevel(), scan.getIsolationLevel());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    assertEquals(get.getLoadColumnFamiliesOnDemandValue(),<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        scan.getLoadColumnFamiliesOnDemandValue());<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    assertEquals(get.getMaxResultsPerColumnFamily(), scan.getMaxResultsPerColumnFamily());<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    assertEquals(get.getMaxVersions(), scan.getMaxVersions());<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    assertEquals(get.getRowOffsetPerColumnFamily(), scan.getRowOffsetPerColumnFamily());<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    assertEquals(get.getTimeRange().getMin(), scan.getTimeRange().getMin());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    assertEquals(get.getTimeRange().getMax(), scan.getTimeRange().getMax());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assertTrue(Bytes.equals(get.getAttribute("att_v0"), scan.getAttribute("att_v0")));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin(),<a name="line.104"></a>
+<span class="sourceLineNo">105</span>            scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax(),<a name="line.106"></a>
+<span class="sourceLineNo">107</span>            scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    assertEquals(get.getReplicaId(), scan.getReplicaId());<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    assertEquals(get.getACL(), scan.getACL());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    assertEquals(get.getAuthorizations().getLabels(), scan.getAuthorizations().getLabels());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(get.getPriority(), scan.getPriority());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Test<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public void testScanAttributes() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Scan scan = new Scan();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Assert.assertNull(scan.getAttribute("absent"));<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    scan.setAttribute("absent", null);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    Assert.assertNull(scan.getAttribute("absent"));<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // adding attribute<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    scan.setAttribute("attribute1", Bytes.toBytes("value1"));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan.getAttribute("attribute1")));<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"),<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        scan.getAttributesMap().get("attribute1")));<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // overriding attribute value<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    scan.setAttribute("attribute1", Bytes.toBytes("value12"));<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), scan.getAttribute("attribute1")));<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"),<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        scan.getAttributesMap().get("attribute1")));<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // adding another attribute<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    scan.setAttribute("attribute2", Bytes.toBytes("value2"));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan.getAttribute("attribute2")));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Assert.assertEquals(2, scan.getAttributesMap().size());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"),<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        scan.getAttributesMap().get("attribute2")));<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // removing attribute<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    scan.setAttribute("attribute2", null);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    Assert.assertNull(scan.getAttribute("attribute2"));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    Assert.assertNull(scan.getAttributesMap().get("attribute2"));<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // removing non-existed attribute<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    scan.setAttribute("attribute2", null);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Assert.assertNull(scan.getAttribute("attribute2"));<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    Assert.assertEquals(1, scan.getAttributesMap().size());<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    Assert.assertNull(scan.getAttributesMap().get("attribute2"));<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // removing another attribute<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    scan.setAttribute("attribute1", null);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Assert.assertNull(scan.getAttribute("attribute1"));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Assert.assertTrue(scan.getAttributesMap().isEmpty());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Assert.assertNull(scan.getAttributesMap().get("attribute1"));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @Test<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public void testNullQualifier() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    Scan scan = new Scan();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte[] family = Bytes.toBytes("family");<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    scan.addColumn(family, null);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Set&lt;byte[]&gt; qualifiers = scan.getFamilyMap().get(family);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Assert.assertEquals(1, qualifiers.size());<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Test<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void testSetAuthorizations() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Scan scan = new Scan();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      scan.setAuthorizations(new Authorizations("\u002b|\u0029"));<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      scan.setAuthorizations(new Authorizations("A", "B", "0123", "A0", "1A1", "_a"));<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      scan.setAuthorizations(new Authorizations("A|B"));<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      scan.setAuthorizations(new Authorizations("A&amp;B"));<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      scan.setAuthorizations(new Authorizations("!B"));<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      scan.setAuthorizations(new Authorizations("A", "(A)"));<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      scan.setAuthorizations(new Authorizations("A", "{A"));<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      scan.setAuthorizations(new Authorizations(" "));<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      scan.setAuthorizations(new Authorizations(":B"));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      scan.setAuthorizations(new Authorizations("-B"));<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      scan.setAuthorizations(new Authorizations(".B"));<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      scan.setAuthorizations(new Authorizations("/B"));<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    } catch (IllegalArgumentException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      fail("should not throw exception");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  @Test<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public void testSetStartRowAndSetStopRow() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Scan scan = new Scan();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    scan.withStartRow(null);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    scan.withStartRow(new byte[1]);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    scan.withStartRow(new byte[HConstants.MAX_ROW_LENGTH]);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    try {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      scan.withStartRow(new byte[HConstants.MAX_ROW_LENGTH+1]);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      fail("should've thrown exception");<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    } catch (IllegalArgumentException iae) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    } catch (Exception e) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      fail("expected IllegalArgumentException to be thrown");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    scan.withStopRow(null);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    scan.withStopRow(new byte[1]);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    scan.withStopRow(new byte[HConstants.MAX_ROW_LENGTH]);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    try {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      scan.withStopRow(new byte[HConstants.MAX_ROW_LENGTH+1]);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      fail("should've thrown exception");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } catch (IllegalArgumentException iae) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    } catch (Exception e) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      fail("expected IllegalArgumentException to be thrown");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  @Test<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public void testScanCopyConstructor() throws Exception {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    Scan scan = new Scan();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("q"))<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        .setACL("test_user", new Permission(Permission.Action.READ))<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        .setAllowPartialResults(true)<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        .setAsyncPrefetch(false)<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        .setAttribute("test_key", Bytes.toBytes("test_value"))<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        .setAuthorizations(new Authorizations("test_label"))<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        .setBatch(10)<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        .setCacheBlocks(false)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        .setCaching(10)<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        .setConsistency(Consistency.TIMELINE)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        .setFilter(new FilterList())<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        .setId("scan_copy_constructor")<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        .setIsolationLevel(IsolationLevel.READ_COMMITTED)<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        .setLimit(100)<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        .setLoadColumnFamiliesOnDemand(false)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        .setMaxResultSize(100)<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        .setMaxResultsPerColumnFamily(1000)<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        .readVersions(9999)<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .setMvccReadPoint(5)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .setNeedCursorResult(true)<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .setPriority(1)<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        .setRaw(true)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        .setReplicaId(3)<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        .setReversed(true)<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        .setRowOffsetPerColumnFamily(5)<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        .setRowPrefixFilter(Bytes.toBytes("row_"))<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        .setScanMetricsEnabled(true)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        .setReadType(ReadType.STREAM)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        .withStartRow(Bytes.toBytes("row_1"))<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        .withStopRow(Bytes.toBytes("row_2"))<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        .setTimeRange(0, 13);<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // create a copy of existing scan object<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    Scan scanCopy = new Scan(scan);<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>    // validate fields of copied scan object match with the original scan object<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertEquals(scan.getACL(), scanCopy.getACL());<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertEquals(scan.getAllowPartialResults(), scanCopy.getAllowPartialResults());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertEquals(scan.getAttribute("test_key"), scanCopy.getAttribute("test_key"));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertEquals(scan.getAttributeSize(), scanCopy.getAttributeSize());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    assertEquals(scan.getAttributesMap(), scanCopy.getAttributesMap());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    assertEquals(scan.getAuthorizations().getLabels(), scanCopy.getAuthorizations().getLabels());<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    assertEquals(scan.getBatch(), scanCopy.getBatch());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    assertEquals(scan.getCacheBlocks(), scanCopy.getCacheBlocks());<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    assertEquals(scan.getCaching(), scanCopy.getCaching());<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    assertEquals(scan.getConsistency(), scanCopy.getConsistency());<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    assertEquals(scan.getFamilies().length, scanCopy.getFamilies().length);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    assertEquals(scan.getFamilies()[0], scanCopy.getFamilies()[0]);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertEquals(scan.getFamilyMap(), scanCopy.getFamilyMap());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertEquals(scan.getFilter(), scanCopy.getFilter());<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertEquals(scan.getId(), scanCopy.getId());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertEquals(scan.getIsolationLevel(), scanCopy.getIsolationLevel());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertEquals(scan.getLimit(), scanCopy.getLimit());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertEquals(scan.getLoadColumnFamiliesOnDemandValue(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      scanCopy.getLoadColumnFamiliesOnDemandValue());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertEquals(scan.getMaxResultSize(), scanCopy.getMaxResultSize());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertEquals(scan.getMaxResultsPerColumnFamily(), scanCopy.getMaxResultsPerColumnFamily());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertEquals(scan.getMaxVersions(), scanCopy.getMaxVersions());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assertEquals(scan.getMvccReadPoint(), scanCopy.getMvccReadPoint());<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    assertEquals(scan.getPriority(), scanCopy.getPriority());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    assertEquals(scan.getReadType(), scanCopy.getReadType());<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    assertEquals(scan.getReplicaId(), scanCopy.getReplicaId());<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    assertEquals(scan.getRowOffsetPerColumnFamily(), scanCopy.getRowOffsetPerColumnFamily());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertEquals(scan.getStartRow(), scanCopy.getStartRow());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertEquals(scan.getStopRow(), scanCopy.getStopRow());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    assertEquals(scan.getTimeRange(), scanCopy.getTimeRange());<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>    assertTrue("Make sure copy constructor adds all the fields in the copied object",<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      EqualsBuilder.reflectionEquals(scan, scanCopy));<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  public void testScanReadType() throws Exception {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    Scan scan = new Scan();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    assertEquals(ReadType.DEFAULT, scan.getReadType());<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Scan copyScan = new Scan(scan);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    assertEquals(ReadType.DEFAULT, copyScan.getReadType());<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>}<a name="line.302"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
index 4ff9287..28f1ba1 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.LimitKVsReturnFilter.html
@@ -57,909 +57,910 @@
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNameTestRule;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.filter.ColumnRangeFilter;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.ClassRule;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.Rule;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.runner.RunWith;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.runners.Parameterized;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.Logger;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.LoggerFactory;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * A client-side test, mostly testing scanners with various parameters. Parameterized on different<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * registry implementations.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>@Category({MediumTests.class, ClientTests.class})<a name="line.79"></a>
-<span class="sourceLineNo">080</span>@RunWith(Parameterized.class)<a name="line.80"></a>
-<span class="sourceLineNo">081</span>public class TestScannersFromClientSide {<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  @ClassRule<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      HBaseClassTestRule.forClass(TestScannersFromClientSide.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Logger LOG = LoggerFactory.getLogger(TestScannersFromClientSide.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte [] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private static byte [] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static byte [] VALUE = Bytes.toBytes("testValue");<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @Rule<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @AfterClass<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public static void tearDownAfterClass() throws Exception {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (TEST_UTIL != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Parameterized.Parameters<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return Arrays.asList(new Object[][] {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { MasterRegistry.class, 1},<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        { MasterRegistry.class, 2},<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        { ZKConnectionRegistry.class, 1}<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    });<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * JUnit does not provide an easy way to run a hook after each parameterized run. Without that<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * there is no easy way to restart the test cluster after each parameterized run. Annotation<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * BeforeParam does not work either because it runs before parameterization and hence does not<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * have access to the test parameters (which is weird).<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * This *hack* checks if the current instance of test cluster configuration has the passed<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * parameterized configs. In such a case, we can just reuse the cluster for test and do not need<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * to initialize from scratch. While this is a hack, it saves a ton of time for the full<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * test and de-flakes it.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private static boolean isSameParameterizedCluster(Class&lt;?&gt; registryImpl, int numHedgedReqs) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // initialize() is called for every unit test, however we only want to reset the cluster state<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // at the end of every parameterized run.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (TEST_UTIL == null) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      return false;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    Class&lt;?&gt; confClass = conf.getClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      ZKConnectionRegistry.class);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    int hedgedReqConfig = conf.getInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_DEFAULT);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return confClass.getName().equals(registryImpl.getName()) &amp;&amp; numHedgedReqs == hedgedReqConfig;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public TestScannersFromClientSide(Class&lt;?&gt; registryImpl, int numHedgedReqs) throws Exception {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (isSameParameterizedCluster(registryImpl, numHedgedReqs)) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (TEST_UTIL != null) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      // We reached the end of a parameterized run, clean up the cluster.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    conf.setLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY, 10 * 1024 * 1024);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    conf.setClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, registryImpl,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        ConnectionRegistry.class);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Preconditions.checkArgument(numHedgedReqs &gt; 0);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    conf.setInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY, numHedgedReqs);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    StartMiniClusterOption.Builder builder = StartMiniClusterOption.builder();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // Multiple masters needed only when hedged reads for master registry are enabled.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    builder.numMasters(numHedgedReqs &gt; 1 ? 3 : 1).numRegionServers(3);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    TEST_UTIL.startMiniCluster(builder.build());<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * Test from client side for batch of scan<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public void testScanBatch() throws Exception {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    final TableName tableName = name.getTableName();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 8);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Put put;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    Scan scan;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Delete delete;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Result result;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ResultScanner scanner;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    boolean toLog = true;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    List&lt;Cell&gt; kvListExp;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // table: row, family, c0:0, c1:1, ... , c7:7<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    put = new Put(ROW);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      put.add(kv);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    ht.put(put);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // table: row, family, c0:0, c1:1, ..., c6:2, c6:6 , c7:7<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    put = new Put(ROW);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[6], 2, VALUE);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    put.add(kv);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    ht.put(put);<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // delete upto ts: 3<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    delete = new Delete(ROW);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    delete.addFamily(FAMILY, 3);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    ht.delete(delete);<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // without batch<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    scan = new Scan().withStartRow(ROW);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    scan.readAllVersions();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    scanner = ht.getScanner(scan);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    // c4:4, c5:5, c6:6, c7:7<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    result = scanner.next();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // with batch<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    scan =  new Scan().withStartRow(ROW);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    scan.readAllVersions();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    scan.setBatch(2);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    scanner = ht.getScanner(scan);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // First batch: c4:4, c5:5<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    result = scanner.next();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // Second batch: c6:6, c7:7<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    result = scanner.next();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    verifyResult(result, kvListExp, toLog, "Testing second batch of scan");<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Test<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public void testMaxResultSizeIsSetToDefault() throws Exception {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    final TableName tableName = name.getTableName();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // The max result size we expect the scan to use by default.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    long expectedMaxResultSize =<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        TEST_UTIL.getConfiguration().getLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          HConstants.DEFAULT_HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    int numRows = 5;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    int numQualifiers = 10;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // Specify the cell size such that a single row will be larger than the default<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    // value of maxResultSize. This means that Scan RPCs should return at most a single<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // result back to the client.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    int cellSize = (int) (expectedMaxResultSize / (numQualifiers - 1));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    byte[] cellValue = Bytes.createMaxByteArray(cellSize);<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    Put put;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      put = new Put(ROWS[row]);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], cellValue);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        put.add(kv);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      puts.add(put);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    ht.put(puts);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // Create a scan with the default configuration.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    Scan scan = new Scan();<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      assertThat(scanner, instanceOf(AsyncTableResultScanner.class));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      scanner.next();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      AsyncTableResultScanner s = (AsyncTableResultScanner) scanner;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      // The scanner should have, at most, a single result in its cache. If there more results<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      // exists<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      // in the cache it means that more than the expected max result size was fetched.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      assertTrue("The cache contains: " + s.getCacheSize() + " results", s.getCacheSize() &lt;= 1);<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><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Scan on not existing table should throw the exception with correct message<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  @Test<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public void testScannerForNotExistingTable() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    String[] tableNames = {"A", "Z", "A:A", "Z:Z"};<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    for(String tableName : tableNames) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        Table table = TEST_UTIL.getConnection().getTable(TableName.valueOf(tableName));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        testSmallScan(table, true, 1, 5);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        fail("TableNotFoundException was not thrown");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      } catch (TableNotFoundException e) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        // We expect that the message for TableNotFoundException would have only the table name only<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        // Otherwise that would mean that localeRegionInMeta doesn't work properly<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        assertEquals(e.getMessage(), tableName);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      } catch (Exception e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        fail("Unexpected exception " + e.getMessage());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testSmallScan() throws Exception {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final TableName tableName = name.getTableName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    int numRows = 10;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    int numQualifiers = 10;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    Put put;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      put = new Put(ROWS[row]);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], VALUE);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        put.add(kv);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      puts.add(put);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ht.put(puts);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    int expectedRows = numRows;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int expectedCols = numRows * numQualifiers;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    // Test normal and reversed<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    testSmallScan(ht, true, expectedRows, expectedCols);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    testSmallScan(ht, false, expectedRows, expectedCols);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Run through a variety of test configurations with a small scan<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private void testSmallScan(<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Table table, boolean reversed, int rows, int columns) throws Exception {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    Scan baseScan = new Scan();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    baseScan.setReversed(reversed);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    baseScan.setSmall(true);<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    Scan scan = new Scan(baseScan);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    scan = new Scan(baseScan);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    scan.setMaxResultSize(1);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>    scan = new Scan(baseScan);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    scan.setMaxResultSize(1);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private void verifyExpectedCounts(Table table, Scan scan, int expectedRowCount,<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      int expectedCellCount) throws Exception {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    ResultScanner scanner = table.getScanner(scan);<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    int rowCount = 0;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    int cellCount = 0;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    Result r = null;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    while ((r = scanner.next()) != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      rowCount++;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      cellCount += r.rawCells().length;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    assertTrue("Expected row count: " + expectedRowCount + " Actual row count: " + rowCount,<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        expectedRowCount == rowCount);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    assertTrue("Expected cell count: " + expectedCellCount + " Actual cell count: " + cellCount,<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        expectedCellCount == cellCount);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * Test from client side for get with maxResultPerCF set<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   */<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @Test<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public void testGetMaxResults() throws Exception {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final TableName tableName = name.getTableName();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>    Get get;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    Put put;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Result result;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    boolean toLog = true;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    List&lt;Cell&gt; kvListExp;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Insert one CF for row[0]<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    put = new Put(ROW);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    for (int i=0; i &lt; 10; i++) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      put.add(kv);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      kvListExp.add(kv);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    ht.put(put);<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    get = new Get(ROW);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    result = ht.get(get);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    verifyResult(result, kvListExp, toLog, "Testing without setting maxResults");<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    get = new Get(ROW);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    result = ht.get(get);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[0], 1, VALUE));<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    verifyResult(result, kvListExp, toLog, "Testing basic setMaxResults");<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Filters: ColumnRangeFilter<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    get = new Get(ROW);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.417"></a>
-<span class="sourceLineNo">418</span>                                        true));<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    result = ht.get(get);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[2], 1, VALUE));<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    verifyResult(result, kvListExp, toLog, "Testing single CF with CRF");<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // Insert two more CF for row[0]<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // 20 columns for CF2, 10 columns for CF1<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    put = new Put(ROW);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      put.add(kv);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    ht.put(put);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    put = new Put(ROW);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (int i=0; i &lt; 10; i++) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      put.add(kv);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    ht.put(put);<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    get = new Get(ROW);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    get.setMaxResultsPerColumnFamily(12);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    get.addFamily(FAMILIES[1]);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    get.addFamily(FAMILIES[2]);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    result = ht.get(get);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    //Exp: CF1:q0, ..., q9, CF2: q0, q1, q10, q11, ..., q19<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    for (int i=0; i &lt; 10; i++) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (int i=0; i &lt; 2; i++) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (int i=10; i &lt; 20; i++) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs");<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    // Filters: ColumnRangeFilter and ColumnPrefixFilter<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    get = new Get(ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    get.setMaxResultsPerColumnFamily(3);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, null, true));<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    result = ht.get(get);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    for (int i=2; i &lt; 5; i++) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (int i=2; i &lt; 5; i++) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    for (int i=2; i &lt; 5; i++) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + CRF");<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    get = new Get(ROW);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    get.setMaxResultsPerColumnFamily(7);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    get.setFilter(new ColumnPrefixFilter(QUALIFIERS[1]));<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    result = ht.get(get);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[1], 1, VALUE));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[1], 1, VALUE));<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    for (int i=10; i &lt; 16; i++) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + PFF");<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Test from client side for scan with maxResultPerCF set<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Test<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void testScanMaxResults() throws Exception {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    final TableName tableName = name.getTableName();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    byte [][] ROWS = HTestConst.makeNAscii(ROW, 2);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 10);<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>    Put put;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    Scan scan;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    Result result;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    boolean toLog = true;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    List&lt;Cell&gt; kvListExp, kvListScan;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (int r=0; r &lt; ROWS.length; r++) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      put = new Put(ROWS[r]);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (int c=0; c &lt; FAMILIES.length; c++) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        for (int q=0; q &lt; QUALIFIERS.length; q++) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          KeyValue kv = new KeyValue(ROWS[r], FAMILIES[c], QUALIFIERS[q], 1, VALUE);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          put.add(kv);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          if (q &lt; 4) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            kvListExp.add(kv);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      ht.put(put);<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>    scan = new Scan();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    scan.setMaxResultsPerColumnFamily(4);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ResultScanner scanner = ht.getScanner(scan);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    kvListScan = new ArrayList&lt;&gt;();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    while ((result = scanner.next()) != null) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Cell kv : result.listCells()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        kvListScan.add(kv);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    result = Result.create(kvListScan);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    verifyResult(result, kvListExp, toLog, "Testing scan with maxResults");<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  /**<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * Test from client side for get with rowOffset<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   */<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  @Test<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public void testGetRowOffset() throws Exception {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    final TableName tableName = name.getTableName();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    Get get;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    Put put;<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    Result result;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    boolean toLog = true;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    List&lt;Cell&gt; kvListExp;<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Insert one CF for row<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    put = new Put(ROW);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    for (int i=0; i &lt; 10; i++) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      put.add(kv);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // skipping first two kvs<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (i &lt; 2) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        continue;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      kvListExp.add(kv);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    ht.put(put);<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>    //setting offset to 2<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    get = new Get(ROW);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    get.setRowOffsetPerColumnFamily(2);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    result = ht.get(get);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    verifyResult(result, kvListExp, toLog, "Testing basic setRowOffset");<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    //setting offset to 20<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    get = new Get(ROW);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    get.setRowOffsetPerColumnFamily(20);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    result = ht.get(get);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    verifyResult(result, kvListExp, toLog, "Testing offset &gt; #kvs");<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    //offset + maxResultPerCF<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    get = new Get(ROW);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    result = ht.get(get);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    for (int i=4; i &lt; 9; i++) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    verifyResult(result, kvListExp, toLog,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      "Testing offset + setMaxResultsPerCF");<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>    // Filters: ColumnRangeFilter<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    get = new Get(ROW);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    get.setRowOffsetPerColumnFamily(1);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                                        true));<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    result = ht.get(get);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    verifyResult(result, kvListExp, toLog, "Testing offset with CRF");<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>    // Insert into two more CFs for row<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    // 10 columns for CF2, 10 columns for CF1<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    for(int j=2; j &gt; 0; j--) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      put = new Put(ROW);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      for (int i=0; i &lt; 10; i++) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        KeyValue kv = new KeyValue(ROW, FAMILIES[j], QUALIFIERS[i], 1, VALUE);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        put.add(kv);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      ht.put(put);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>    get = new Get(ROW);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    get.addFamily(FAMILIES[1]);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    get.addFamily(FAMILIES[2]);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    result = ht.get(get);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    //Exp: CF1:q4, q5, CF2: q4, q5<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[4], 1, VALUE));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[5], 1, VALUE));<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[4], 1, VALUE));<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[5], 1, VALUE));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    verifyResult(result, kvListExp, toLog,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>       "Testing offset + multiple CFs + maxResults");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  @Test<a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public void testScanRawDeleteFamilyVersion() throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    TableName tableName = name.getTableName();<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    conf.set(RPC_CODEC_CONF_KEY, "");<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    conf.set(DEFAULT_CODEC_CLASS, "");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Table table = connection.getTable(tableName)) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      Delete delete = new Delete(ROW);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      delete.addFamilyVersion(FAMILY, 0L);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      table.delete(delete);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      Scan scan = new Scan().withStartRow(ROW).setRaw(true);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      int count = 0;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      while (scanner.next() != null) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        count++;<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      assertEquals(1, count);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      TEST_UTIL.deleteTable(tableName);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Test from client side for scan while the region is reopened<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * on the same region server.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  @Test<a name="line.664"></a>
-<span class="sourceLineNo">665</span>  public void testScanOnReopenedRegion() throws Exception {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    final TableName tableName = name.getTableName();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 2);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Put put;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    Scan scan;<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    Result result;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    ResultScanner scanner;<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    boolean toLog = false;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    List&lt;Cell&gt; kvListExp;<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>    // table: row, family, c0:0, c1:1<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    put = new Put(ROW);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      put.add(kv);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    ht.put(put);<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    scan = new Scan().withStartRow(ROW);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    scanner = ht.getScanner(scan);<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>    HRegionLocation loc;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>    try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      loc = locator.getRegionLocation(ROW);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    RegionInfo hri = loc.getRegion();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    byte[] regionName = hri.getRegionName();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    int i = cluster.getServerWith(regionName);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    HRegionServer rs = cluster.getRegionServer(i);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    LOG.info("Unassigning " + hri);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    TEST_UTIL.getAdmin().unassign(hri.getRegionName(), true);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    long startTime = EnvironmentEdgeManager.currentTime();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    long timeOut = 10000;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    boolean offline = false;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    while (true) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (rs.getOnlineRegion(regionName) == null) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        offline = true;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        break;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      assertTrue("Timed out in closing the testing region",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    assertTrue(offline);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    LOG.info("Assigning " + hri);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    TEST_UTIL.getAdmin().assign(hri.getRegionName());<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    startTime = EnvironmentEdgeManager.currentTime();<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    while (true) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      rs = cluster.getRegionServer(cluster.getServerWith(regionName));<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      if (rs != null &amp;&amp; rs.getOnlineRegion(regionName) != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        offline = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        break;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      assertTrue("Timed out in open the testing region",<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    assertFalse(offline);<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // c0:0, c1:1<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[0], 0, VALUE));<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[1], 1, VALUE));<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    result = scanner.next();<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    verifyResult(result, kvListExp, toLog, "Testing scan on re-opened region");<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  static void verifyResult(Result result, List&lt;Cell&gt; expKvList, boolean toLog,<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      String msg) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>    LOG.info(msg);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    LOG.info("Expected count: " + expKvList.size());<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    LOG.info("Actual count: " + result.size());<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    if (expKvList.isEmpty()) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      return;<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>    int i = 0;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    for (Cell kv : result.rawCells()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (i &gt;= expKvList.size()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        break;  // we will check the size later<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      Cell kvExp = expKvList.get(i++);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (toLog) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        LOG.info("get kv is: " + kv.toString());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        LOG.info("exp kv is: " + kvExp.toString());<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      assertTrue("Not equal", kvExp.equals(kv));<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>    assertEquals(expKvList.size(), result.size());<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  @Test<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  public void testReadExpiredDataForRawScan() throws IOException {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    TableName tableName = name.getTableName();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    long ts = EnvironmentEdgeManager.currentTime() - 10000;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    byte[] value = Bytes.toBytes("expired");<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, ts, value));<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      assertArrayEquals(value, table.get(new Get(ROW)).getValue(FAMILY, QUALIFIER));<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      TEST_UTIL.getAdmin().modifyColumnFamily(tableName,<a name="line.770"></a>
-<span class="sourceLineNo">771</span>        ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).setTimeToLive(5).build());<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      try (ResultScanner scanner = table.getScanner(FAMILY)) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        assertNull(scanner.next());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      try (ResultScanner scanner = table.getScanner(new Scan().setRaw(true))) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        assertArrayEquals(value, scanner.next().getValue(FAMILY, QUALIFIER));<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        assertNull(scanner.next());<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  @Test<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  public void testScanWithColumnsAndFilterAndVersion() throws IOException {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    TableName tableName = name.getTableName();<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 4)) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      for (int i = 0; i &lt; 4; i++) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        Put put = new Put(ROW);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        put.addColumn(FAMILY, QUALIFIER, now + i, VALUE);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        table.put(put);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>      Scan scan = new Scan();<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFIER)));<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      scan.readVersions(3);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        Result result = scanner.next();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        assertEquals(3, result.size());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      }<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><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  @Test<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  public void testScanWithSameStartRowStopRow() throws IOException {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    TableName tableName = name.getTableName();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE));<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>      Scan scan = new Scan().withStartRow(ROW).withStopRow(ROW);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        assertNull(scanner.next());<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>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, true);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        Result result = scanner.next();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>        assertNotNull(result);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        assertArrayEquals(ROW, result.getRow());<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        assertArrayEquals(VALUE, result.getValue(FAMILY, QUALIFIER));<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        assertNull(scanner.next());<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, false);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        assertNull(scanner.next());<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, false);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        assertNull(scanner.next());<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      }<a name="line.833"></a>
-<span class="sourceLineNo">834</span><a name="line.834"></a>
-<span class="sourceLineNo">835</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, true);<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>        assertNull(scanner.next());<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>  }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>  @Test<a name="line.842"></a>
-<span class="sourceLineNo">843</span>  public void testReverseScanWithFlush() throws Exception {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    TableName tableName = name.getTableName();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    final int BATCH_SIZE = 10;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    final int ROWS_TO_INSERT = 100;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    final byte[] LARGE_VALUE = generateHugeValue(128 * 1024);<a name="line.847"></a>
-<span class="sourceLineNo">848</span><a name="line.848"></a>
-<span class="sourceLineNo">849</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      Admin admin = TEST_UTIL.getAdmin()) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      List&lt;Put&gt; putList = new ArrayList&lt;&gt;();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      for (long i = 0; i &lt; ROWS_TO_INSERT; i++) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        put.addColumn(FAMILY, QUALIFIER, LARGE_VALUE);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        putList.add(put);<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>        if (putList.size() &gt;= BATCH_SIZE) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          table.put(putList);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          admin.flush(tableName);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          putList.clear();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>        }<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>      if (!putList.isEmpty()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        table.put(putList);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>        admin.flush(tableName);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        putList.clear();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>      Scan scan = new Scan();<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      scan.setReversed(true);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      int count = 0;<a name="line.872"></a>
-<span class="sourceLineNo">873</span><a name="line.873"></a>
-<span class="sourceLineNo">874</span>      try (ResultScanner results = table.getScanner(scan)) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        for (Result result : results) {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          count++;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      assertEquals("Expected " + ROWS_TO_INSERT + " rows in the table but it is " + count,<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        ROWS_TO_INSERT, count);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<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>  @Test<a name="line.884"></a>
-<span class="sourceLineNo">885</span>  public void testScannerWithPartialResults() throws Exception {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    TableName tableName = TableName.valueOf("testScannerWithPartialResults");<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    try (Table table = TEST_UTIL.createMultiRegionTable(tableName,<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      Bytes.toBytes("c"), 4)) {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      byte[] largeArray = new byte[10000];<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      Put put = new Put(Bytes.toBytes("aaaa0"));<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), Bytes.toBytes("2"));<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), Bytes.toBytes("3"));<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("4"), Bytes.toBytes("4"));<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      puts.add(put);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      put = new Put(Bytes.toBytes("aaaa1"));<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), largeArray);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), largeArray);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      puts.add(put);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      table.put(puts);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      Scan scan = new Scan();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      scan.addFamily(Bytes.toBytes("c"));<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName.getName());<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      scan.setMaxResultSize(10001);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      scan.withStopRow(Bytes.toBytes("bbbb"));<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      scan.setFilter(new LimitKVsReturnFilter());<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      ResultScanner rs = table.getScanner(scan);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      Result result;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      int expectedKvNumber = 6;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      int returnedKvNumber = 0;<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      while((result = rs.next()) != null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        returnedKvNumber += result.listCells().size();<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      rs.close();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      assertEquals(expectedKvNumber, returnedKvNumber);<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><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  public static class LimitKVsReturnFilter extends FilterBase {<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    private int cellCount = 0;<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    @Override<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    public ReturnCode filterCell(Cell v) throws IOException {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      if (cellCount &gt;= 6) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        cellCount++;<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        return ReturnCode.SKIP;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      }<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      cellCount++;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      return ReturnCode.INCLUDE;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    @Override<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    public boolean filterAllRemaining() throws IOException {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      if (cellCount &lt; 7) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>        return false;<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      cellCount++;<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      return true;<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>    @Override<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    public String toString() {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      return this.getClass().getSimpleName();<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>    public static LimitKVsReturnFilter parseFrom(final byte [] pbBytes)<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        throws DeserializationException {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      return new LimitKVsReturnFilter();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span>}<a name="line.954"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.filter.ColumnRangeFilter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.AfterClass;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.ClassRule;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Rule;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.Test;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.experimental.categories.Category;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.runner.RunWith;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.runners.Parameterized;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>/**<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * A client-side test, mostly testing scanners with various parameters. Parameterized on different<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * registry implementations.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category({MediumTests.class, ClientTests.class})<a name="line.80"></a>
+<span class="sourceLineNo">081</span>@RunWith(Parameterized.class)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>public class TestScannersFromClientSide {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @ClassRule<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      HBaseClassTestRule.forClass(TestScannersFromClientSide.class);<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestScannersFromClientSide.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static byte [] ROW = Bytes.toBytes("testRow");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static byte [] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte [] VALUE = Bytes.toBytes("testValue");<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Rule<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @AfterClass<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static void tearDownAfterClass() throws Exception {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (TEST_UTIL != null) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @Parameterized.Parameters<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return Arrays.asList(new Object[][] {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        { MasterRegistry.class, 1},<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        { MasterRegistry.class, 2},<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        { ZKConnectionRegistry.class, 1}<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    });<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * JUnit does not provide an easy way to run a hook after each parameterized run. Without that<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * there is no easy way to restart the test cluster after each parameterized run. Annotation<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * BeforeParam does not work either because it runs before parameterization and hence does not<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * have access to the test parameters (which is weird).<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   *<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * This *hack* checks if the current instance of test cluster configuration has the passed<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * parameterized configs. In such a case, we can just reuse the cluster for test and do not need<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * to initialize from scratch. While this is a hack, it saves a ton of time for the full<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * test and de-flakes it.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private static boolean isSameParameterizedCluster(Class&lt;?&gt; registryImpl, int numHedgedReqs) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // initialize() is called for every unit test, however we only want to reset the cluster state<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // at the end of every parameterized run.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (TEST_UTIL == null) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      return false;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Class&lt;?&gt; confClass = conf.getClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ZKConnectionRegistry.class);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    int hedgedReqConfig = conf.getInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_DEFAULT);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return confClass.getName().equals(registryImpl.getName()) &amp;&amp; numHedgedReqs == hedgedReqConfig;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public TestScannersFromClientSide(Class&lt;?&gt; registryImpl, int numHedgedReqs) throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    if (isSameParameterizedCluster(registryImpl, numHedgedReqs)) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      return;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (TEST_UTIL != null) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      // We reached the end of a parameterized run, clean up the cluster.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    conf.setLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY, 10 * 1024 * 1024);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    conf.setClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, registryImpl,<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        ConnectionRegistry.class);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Preconditions.checkArgument(numHedgedReqs &gt; 0);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    conf.setInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY, numHedgedReqs);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    StartMiniClusterOption.Builder builder = StartMiniClusterOption.builder();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Multiple masters needed only when hedged reads for master registry are enabled.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    builder.numMasters(numHedgedReqs &gt; 1 ? 3 : 1).numRegionServers(3);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    TEST_UTIL.startMiniCluster(builder.build());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * Test from client side for batch of scan<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @Test<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public void testScanBatch() throws Exception {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    final TableName tableName = name.getTableName();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 8);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Put put;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Scan scan;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    Delete delete;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Result result;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ResultScanner scanner;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    boolean toLog = true;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    List&lt;Cell&gt; kvListExp;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // table: row, family, c0:0, c1:1, ... , c7:7<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    put = new Put(ROW);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      put.add(kv);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    ht.put(put);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // table: row, family, c0:0, c1:1, ..., c6:2, c6:6 , c7:7<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    put = new Put(ROW);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[6], 2, VALUE);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    put.add(kv);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ht.put(put);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // delete upto ts: 3<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    delete = new Delete(ROW);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    delete.addFamily(FAMILY, 3);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    ht.delete(delete);<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // without batch<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    scan = new Scan().withStartRow(ROW);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    scan.readAllVersions();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    scanner = ht.getScanner(scan);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // c4:4, c5:5, c6:6, c7:7<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    result = scanner.next();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // with batch<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    scan =  new Scan().withStartRow(ROW);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    scan.readAllVersions();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    scan.setBatch(2);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    scanner = ht.getScanner(scan);<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // First batch: c4:4, c5:5<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    result = scanner.next();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    // Second batch: c6:6, c7:7<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    result = scanner.next();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    verifyResult(result, kvListExp, toLog, "Testing second batch of scan");<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Test<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public void testMaxResultSizeIsSetToDefault() throws Exception {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    final TableName tableName = name.getTableName();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // The max result size we expect the scan to use by default.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long expectedMaxResultSize =<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        TEST_UTIL.getConfiguration().getLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          HConstants.DEFAULT_HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE);<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>    int numRows = 5;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    int numQualifiers = 10;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // Specify the cell size such that a single row will be larger than the default<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // value of maxResultSize. This means that Scan RPCs should return at most a single<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // result back to the client.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    int cellSize = (int) (expectedMaxResultSize / (numQualifiers - 1));<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    byte[] cellValue = Bytes.createMaxByteArray(cellSize);<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    Put put;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      put = new Put(ROWS[row]);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], cellValue);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        put.add(kv);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      puts.add(put);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    ht.put(puts);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // Create a scan with the default configuration.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    Scan scan = new Scan();<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      assertThat(scanner, instanceOf(AsyncTableResultScanner.class));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      scanner.next();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      AsyncTableResultScanner s = (AsyncTableResultScanner) scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      // The scanner should have, at most, a single result in its cache. If there more results<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      // exists<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      // in the cache it means that more than the expected max result size was fetched.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      assertTrue("The cache contains: " + s.getCacheSize() + " results", s.getCacheSize() &lt;= 1);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * Scan on not existing table should throw the exception with correct message<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Test<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public void testScannerForNotExistingTable() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    String[] tableNames = {"A", "Z", "A:A", "Z:Z"};<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    for(String tableName : tableNames) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Table table = TEST_UTIL.getConnection().getTable(TableName.valueOf(tableName));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        testSmallScan(table, true, 1, 5);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        fail("TableNotFoundException was not thrown");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      } catch (TableNotFoundException e) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        // We expect that the message for TableNotFoundException would have only the table name only<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // Otherwise that would mean that localeRegionInMeta doesn't work properly<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        assertEquals(e.getMessage(), tableName);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (Exception e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        fail("Unexpected exception " + e.getMessage());<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @Test<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public void testSmallScan() throws Exception {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final TableName tableName = name.getTableName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    int numRows = 10;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    int numQualifiers = 10;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Put put;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      put = new Put(ROWS[row]);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], VALUE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        put.add(kv);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      puts.add(put);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ht.put(puts);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    int expectedRows = numRows;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int expectedCols = numRows * numQualifiers;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    // Test normal and reversed<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    testSmallScan(ht, true, expectedRows, expectedCols);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    testSmallScan(ht, false, expectedRows, expectedCols);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  }<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>   * Run through a variety of test configurations with a small scan<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private void testSmallScan(<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      Table table, boolean reversed, int rows, int columns) throws Exception {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    Scan baseScan = new Scan();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    baseScan.setReversed(reversed);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    baseScan.setReadType(ReadType.PREAD);<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    Scan scan = new Scan(baseScan);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    scan = new Scan(baseScan);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    scan.setMaxResultSize(1);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    scan = new Scan(baseScan);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    scan.setMaxResultSize(1);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private void verifyExpectedCounts(Table table, Scan scan, int expectedRowCount,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      int expectedCellCount) throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    ResultScanner scanner = table.getScanner(scan);<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    int rowCount = 0;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    int cellCount = 0;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    Result r = null;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    while ((r = scanner.next()) != null) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      rowCount++;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      cellCount += r.rawCells().length;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    assertTrue("Expected row count: " + expectedRowCount + " Actual row count: " + rowCount,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        expectedRowCount == rowCount);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    assertTrue("Expected cell count: " + expectedCellCount + " Actual cell count: " + cellCount,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        expectedCellCount == cellCount);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    scanner.close();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Test from client side for get with maxResultPerCF set<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  @Test<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public void testGetMaxResults() throws Exception {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final TableName tableName = name.getTableName();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>    Get get;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    Put put;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    Result result;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    boolean toLog = true;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    List&lt;Cell&gt; kvListExp;<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Insert one CF for row[0]<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    put = new Put(ROW);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    for (int i=0; i &lt; 10; i++) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      put.add(kv);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      kvListExp.add(kv);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    ht.put(put);<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>    get = new Get(ROW);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    result = ht.get(get);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    verifyResult(result, kvListExp, toLog, "Testing without setting maxResults");<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    get = new Get(ROW);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    result = ht.get(get);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[0], 1, VALUE));<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    verifyResult(result, kvListExp, toLog, "Testing basic setMaxResults");<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    // Filters: ColumnRangeFilter<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    get = new Get(ROW);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.418"></a>
+<span class="sourceLineNo">419</span>                                        true));<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    result = ht.get(get);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[2], 1, VALUE));<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    verifyResult(result, kvListExp, toLog, "Testing single CF with CRF");<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Insert two more CF for row[0]<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    // 20 columns for CF2, 10 columns for CF1<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    put = new Put(ROW);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      put.add(kv);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    ht.put(put);<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    put = new Put(ROW);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    for (int i=0; i &lt; 10; i++) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      put.add(kv);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    ht.put(put);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    get = new Get(ROW);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    get.setMaxResultsPerColumnFamily(12);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    get.addFamily(FAMILIES[1]);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    get.addFamily(FAMILIES[2]);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    result = ht.get(get);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    //Exp: CF1:q0, ..., q9, CF2: q0, q1, q10, q11, ..., q19<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (int i=0; i &lt; 10; i++) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (int i=0; i &lt; 2; i++) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    for (int i=10; i &lt; 20; i++) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs");<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    // Filters: ColumnRangeFilter and ColumnPrefixFilter<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    get = new Get(ROW);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    get.setMaxResultsPerColumnFamily(3);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, null, true));<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    result = ht.get(get);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    for (int i=2; i &lt; 5; i++) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    for (int i=2; i &lt; 5; i++) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    for (int i=2; i &lt; 5; i++) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + CRF");<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    get = new Get(ROW);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    get.setMaxResultsPerColumnFamily(7);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    get.setFilter(new ColumnPrefixFilter(QUALIFIERS[1]));<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    result = ht.get(get);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[1], 1, VALUE));<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[1], 1, VALUE));<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    for (int i=10; i &lt; 16; i++) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + PFF");<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * Test from client side for scan with maxResultPerCF set<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Test<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public void testScanMaxResults() throws Exception {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    final TableName tableName = name.getTableName();<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    byte [][] ROWS = HTestConst.makeNAscii(ROW, 2);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 10);<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span>    Put put;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Scan scan;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    Result result;<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    boolean toLog = true;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    List&lt;Cell&gt; kvListExp, kvListScan;<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>    for (int r=0; r &lt; ROWS.length; r++) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      put = new Put(ROWS[r]);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      for (int c=0; c &lt; FAMILIES.length; c++) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        for (int q=0; q &lt; QUALIFIERS.length; q++) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          KeyValue kv = new KeyValue(ROWS[r], FAMILIES[c], QUALIFIERS[q], 1, VALUE);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          put.add(kv);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          if (q &lt; 4) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>            kvListExp.add(kv);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>          }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      ht.put(put);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>    scan = new Scan();<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    scan.setMaxResultsPerColumnFamily(4);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    ResultScanner scanner = ht.getScanner(scan);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    kvListScan = new ArrayList&lt;&gt;();<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    while ((result = scanner.next()) != null) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      for (Cell kv : result.listCells()) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        kvListScan.add(kv);<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      }<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    result = Result.create(kvListScan);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    verifyResult(result, kvListExp, toLog, "Testing scan with maxResults");<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * Test from client side for get with rowOffset<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  @Test<a name="line.545"></a>
+<span class="sourceLineNo">546</span>  public void testGetRowOffset() throws Exception {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    final TableName tableName = name.getTableName();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    Get get;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    Put put;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    Result result;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    boolean toLog = true;<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    List&lt;Cell&gt; kvListExp;<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    // Insert one CF for row<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    put = new Put(ROW);<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    for (int i=0; i &lt; 10; i++) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      put.add(kv);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // skipping first two kvs<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      if (i &lt; 2) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        continue;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      }<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      kvListExp.add(kv);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    ht.put(put);<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>    //setting offset to 2<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    get = new Get(ROW);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    get.setRowOffsetPerColumnFamily(2);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    result = ht.get(get);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    verifyResult(result, kvListExp, toLog, "Testing basic setRowOffset");<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>    //setting offset to 20<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    get = new Get(ROW);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    get.setRowOffsetPerColumnFamily(20);<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    result = ht.get(get);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    verifyResult(result, kvListExp, toLog, "Testing offset &gt; #kvs");<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    //offset + maxResultPerCF<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    get = new Get(ROW);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    result = ht.get(get);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    for (int i=4; i &lt; 9; i++) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    verifyResult(result, kvListExp, toLog,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      "Testing offset + setMaxResultsPerCF");<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    // Filters: ColumnRangeFilter<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    get = new Get(ROW);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    get.setRowOffsetPerColumnFamily(1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.601"></a>
+<span class="sourceLineNo">602</span>                                        true));<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    result = ht.get(get);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    verifyResult(result, kvListExp, toLog, "Testing offset with CRF");<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span>    // Insert into two more CFs for row<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    // 10 columns for CF2, 10 columns for CF1<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    for(int j=2; j &gt; 0; j--) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      put = new Put(ROW);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      for (int i=0; i &lt; 10; i++) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        KeyValue kv = new KeyValue(ROW, FAMILIES[j], QUALIFIERS[i], 1, VALUE);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        put.add(kv);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      ht.put(put);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>    get = new Get(ROW);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    get.addFamily(FAMILIES[1]);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    get.addFamily(FAMILIES[2]);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    result = ht.get(get);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    //Exp: CF1:q4, q5, CF2: q4, q5<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[4], 1, VALUE));<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[5], 1, VALUE));<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[4], 1, VALUE));<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[5], 1, VALUE));<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    verifyResult(result, kvListExp, toLog,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>       "Testing offset + multiple CFs + maxResults");<a name="line.634"></a>
+<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>  @Test<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  public void testScanRawDeleteFamilyVersion() throws Exception {<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    TableName tableName = name.getTableName();<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    conf.set(RPC_CODEC_CONF_KEY, "");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    conf.set(DEFAULT_CODEC_CLASS, "");<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        Table table = connection.getTable(tableName)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      Delete delete = new Delete(ROW);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      delete.addFamilyVersion(FAMILY, 0L);<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      table.delete(delete);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      Scan scan = new Scan().withStartRow(ROW).setRaw(true);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      int count = 0;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      while (scanner.next() != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        count++;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      assertEquals(1, count);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    } finally {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      TEST_UTIL.deleteTable(tableName);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
+<span class="sourceLineNo">660</span><a name="line.660"></a>
+<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * Test from client side for scan while the region is reopened<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   * on the same region server.<a name="line.663"></a>
+<span class="sourceLineNo">664</span>   */<a name="line.664"></a>
+<span class="sourceLineNo">665</span>  @Test<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  public void testScanOnReopenedRegion() throws Exception {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    final TableName tableName = name.getTableName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 2);<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>    Put put;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    Scan scan;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    Result result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    ResultScanner scanner;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    boolean toLog = false;<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    List&lt;Cell&gt; kvListExp;<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>    // table: row, family, c0:0, c1:1<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    put = new Put(ROW);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      put.add(kv);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    ht.put(put);<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    scan = new Scan().withStartRow(ROW);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    scanner = ht.getScanner(scan);<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>    HRegionLocation loc;<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      loc = locator.getRegionLocation(ROW);<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    RegionInfo hri = loc.getRegion();<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    byte[] regionName = hri.getRegionName();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    int i = cluster.getServerWith(regionName);<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    HRegionServer rs = cluster.getRegionServer(i);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    LOG.info("Unassigning " + hri);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    TEST_UTIL.getAdmin().unassign(hri.getRegionName(), true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    long startTime = EnvironmentEdgeManager.currentTime();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    long timeOut = 10000;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    boolean offline = false;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    while (true) {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      if (rs.getOnlineRegion(regionName) == null) {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>        offline = true;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        break;<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      assertTrue("Timed out in closing the testing region",<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    assertTrue(offline);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    LOG.info("Assigning " + hri);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    TEST_UTIL.getAdmin().assign(hri.getRegionName());<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    startTime = EnvironmentEdgeManager.currentTime();<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    while (true) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      rs = cluster.getRegionServer(cluster.getServerWith(regionName));<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (rs != null &amp;&amp; rs.getOnlineRegion(regionName) != null) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        offline = false;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        break;<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      assertTrue("Timed out in open the testing region",<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    assertFalse(offline);<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>    // c0:0, c1:1<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[0], 0, VALUE));<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[1], 1, VALUE));<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    result = scanner.next();<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    verifyResult(result, kvListExp, toLog, "Testing scan on re-opened region");<a name="line.733"></a>
+<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>  static void verifyResult(Result result, List&lt;Cell&gt; expKvList, boolean toLog,<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      String msg) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>    LOG.info(msg);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    LOG.info("Expected count: " + expKvList.size());<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    LOG.info("Actual count: " + result.size());<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    if (expKvList.isEmpty()) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>      return;<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>    int i = 0;<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    for (Cell kv : result.rawCells()) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      if (i &gt;= expKvList.size()) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        break;  // we will check the size later<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>      Cell kvExp = expKvList.get(i++);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      if (toLog) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>        LOG.info("get kv is: " + kv.toString());<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        LOG.info("exp kv is: " + kvExp.toString());<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      assertTrue("Not equal", kvExp.equals(kv));<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
+<span class="sourceLineNo">759</span><a name="line.759"></a>
+<span class="sourceLineNo">760</span>    assertEquals(expKvList.size(), result.size());<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  @Test<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  public void testReadExpiredDataForRawScan() throws IOException {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    TableName tableName = name.getTableName();<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    long ts = EnvironmentEdgeManager.currentTime() - 10000;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    byte[] value = Bytes.toBytes("expired");<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, ts, value));<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      assertArrayEquals(value, table.get(new Get(ROW)).getValue(FAMILY, QUALIFIER));<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      TEST_UTIL.getAdmin().modifyColumnFamily(tableName,<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).setTimeToLive(5).build());<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      try (ResultScanner scanner = table.getScanner(FAMILY)) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        assertNull(scanner.next());<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      }<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      try (ResultScanner scanner = table.getScanner(new Scan().setRaw(true))) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        assertArrayEquals(value, scanner.next().getValue(FAMILY, QUALIFIER));<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        assertNull(scanner.next());<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
+<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">783</span>  @Test<a name="line.783"></a>
+<span class="sourceLineNo">784</span>  public void testScanWithColumnsAndFilterAndVersion() throws IOException {<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    TableName tableName = name.getTableName();<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 4)) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      for (int i = 0; i &lt; 4; i++) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        Put put = new Put(ROW);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>        put.addColumn(FAMILY, QUALIFIER, now + i, VALUE);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>        table.put(put);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
+<span class="sourceLineNo">793</span><a name="line.793"></a>
+<span class="sourceLineNo">794</span>      Scan scan = new Scan();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFIER)));<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      scan.readVersions(3);<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>        Result result = scanner.next();<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        assertEquals(3, result.size());<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>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  @Test<a name="line.806"></a>
+<span class="sourceLineNo">807</span>  public void testScanWithSameStartRowStopRow() throws IOException {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    TableName tableName = name.getTableName();<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE));<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>      Scan scan = new Scan().withStartRow(ROW).withStopRow(ROW);<a name="line.812"></a>
+<span class="sourceLineNo">813</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.813"></a>
+<span class="sourceLineNo">814</span>        assertNull(scanner.next());<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      }<a name="line.815"></a>
+<span class="sourceLineNo">816</span><a name="line.816"></a>
+<span class="sourceLineNo">817</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, true);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>        Result result = scanner.next();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        assertNotNull(result);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>        assertArrayEquals(ROW, result.getRow());<a name="line.821"></a>
+<span class="sourceLineNo">822</span>        assertArrayEquals(VALUE, result.getValue(FAMILY, QUALIFIER));<a name="line.822"></a>
+<span class="sourceLineNo">823</span>        assertNull(scanner.next());<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, false);<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        assertNull(scanner.next());<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, false);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>        assertNull(scanner.next());<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>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, true);<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>        assertNull(scanner.next());<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      }<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
+<span class="sourceLineNo">842</span><a name="line.842"></a>
+<span class="sourceLineNo">843</span>  @Test<a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public void testReverseScanWithFlush() throws Exception {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    TableName tableName = name.getTableName();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final int BATCH_SIZE = 10;<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    final int ROWS_TO_INSERT = 100;<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    final byte[] LARGE_VALUE = generateHugeValue(128 * 1024);<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      Admin admin = TEST_UTIL.getAdmin()) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      List&lt;Put&gt; putList = new ArrayList&lt;&gt;();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      for (long i = 0; i &lt; ROWS_TO_INSERT; i++) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        put.addColumn(FAMILY, QUALIFIER, LARGE_VALUE);<a name="line.855"></a>
+<span class="sourceLineNo">856</span>        putList.add(put);<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>        if (putList.size() &gt;= BATCH_SIZE) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          table.put(putList);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          admin.flush(tableName);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          putList.clear();<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><a name="line.864"></a>
+<span class="sourceLineNo">865</span>      if (!putList.isEmpty()) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        table.put(putList);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>        admin.flush(tableName);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>        putList.clear();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>      Scan scan = new Scan();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      scan.setReversed(true);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      int count = 0;<a name="line.873"></a>
+<span class="sourceLineNo">874</span><a name="line.874"></a>
+<span class="sourceLineNo">875</span>      try (ResultScanner results = table.getScanner(scan)) {<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        for (Result result : results) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>          count++;<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>      assertEquals("Expected " + ROWS_TO_INSERT + " rows in the table but it is " + count,<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        ROWS_TO_INSERT, count);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
+<span class="sourceLineNo">884</span><a name="line.884"></a>
+<span class="sourceLineNo">885</span>  @Test<a name="line.885"></a>
+<span class="sourceLineNo">886</span>  public void testScannerWithPartialResults() throws Exception {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    TableName tableName = TableName.valueOf("testScannerWithPartialResults");<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    try (Table table = TEST_UTIL.createMultiRegionTable(tableName,<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      Bytes.toBytes("c"), 4)) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      byte[] largeArray = new byte[10000];<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      Put put = new Put(Bytes.toBytes("aaaa0"));<a name="line.892"></a>
+<span class="sourceLineNo">893</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), Bytes.toBytes("2"));<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), Bytes.toBytes("3"));<a name="line.895"></a>
+<span class="sourceLineNo">896</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("4"), Bytes.toBytes("4"));<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      puts.add(put);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>      put = new Put(Bytes.toBytes("aaaa1"));<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), largeArray);<a name="line.900"></a>
+<span class="sourceLineNo">901</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), largeArray);<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      puts.add(put);<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      table.put(puts);<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      Scan scan = new Scan();<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      scan.addFamily(Bytes.toBytes("c"));<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName.getName());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>      scan.setMaxResultSize(10001);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>      scan.withStopRow(Bytes.toBytes("bbbb"));<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      scan.setFilter(new LimitKVsReturnFilter());<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      ResultScanner rs = table.getScanner(scan);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      Result result;<a name="line.911"></a>
+<span class="sourceLineNo">912</span>      int expectedKvNumber = 6;<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      int returnedKvNumber = 0;<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      while((result = rs.next()) != null) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>        returnedKvNumber += result.listCells().size();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>      }<a name="line.916"></a>
+<span class="sourceLineNo">917</span>      rs.close();<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      assertEquals(expectedKvNumber, returnedKvNumber);<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
+<span class="sourceLineNo">920</span>  }<a name="line.920"></a>
+<span class="sourceLineNo">921</span><a name="line.921"></a>
+<span class="sourceLineNo">922</span>  public static class LimitKVsReturnFilter extends FilterBase {<a name="line.922"></a>
+<span class="sourceLineNo">923</span><a name="line.923"></a>
+<span class="sourceLineNo">924</span>    private int cellCount = 0;<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>    @Override<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    public ReturnCode filterCell(Cell v) throws IOException {<a name="line.927"></a>
+<span class="sourceLineNo">928</span>      if (cellCount &gt;= 6) {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        cellCount++;<a name="line.929"></a>
+<span class="sourceLineNo">930</span>        return ReturnCode.SKIP;<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      }<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      cellCount++;<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      return ReturnCode.INCLUDE;<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>    @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    public boolean filterAllRemaining() throws IOException {<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      if (cellCount &lt; 7) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>        return false;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      }<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      cellCount++;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      return true;<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
+<span class="sourceLineNo">944</span><a name="line.944"></a>
+<span class="sourceLineNo">945</span>    @Override<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    public String toString() {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      return this.getClass().getSimpleName();<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    public static LimitKVsReturnFilter parseFrom(final byte [] pbBytes)<a name="line.950"></a>
+<span class="sourceLineNo">951</span>        throws DeserializationException {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      return new LimitKVsReturnFilter();<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    }<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>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
index 4ff9287..28f1ba1 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
@@ -57,909 +57,910 @@
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNameTestRule;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.filter.ColumnRangeFilter;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.ClassRule;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.Rule;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.runner.RunWith;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.runners.Parameterized;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.Logger;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.LoggerFactory;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * A client-side test, mostly testing scanners with various parameters. Parameterized on different<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * registry implementations.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>@Category({MediumTests.class, ClientTests.class})<a name="line.79"></a>
-<span class="sourceLineNo">080</span>@RunWith(Parameterized.class)<a name="line.80"></a>
-<span class="sourceLineNo">081</span>public class TestScannersFromClientSide {<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  @ClassRule<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      HBaseClassTestRule.forClass(TestScannersFromClientSide.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final Logger LOG = LoggerFactory.getLogger(TestScannersFromClientSide.class);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static byte [] ROW = Bytes.toBytes("testRow");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private static byte [] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static byte [] VALUE = Bytes.toBytes("testValue");<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @Rule<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @AfterClass<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public static void tearDownAfterClass() throws Exception {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (TEST_UTIL != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Parameterized.Parameters<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return Arrays.asList(new Object[][] {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { MasterRegistry.class, 1},<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        { MasterRegistry.class, 2},<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        { ZKConnectionRegistry.class, 1}<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    });<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * JUnit does not provide an easy way to run a hook after each parameterized run. Without that<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * there is no easy way to restart the test cluster after each parameterized run. Annotation<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * BeforeParam does not work either because it runs before parameterization and hence does not<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * have access to the test parameters (which is weird).<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * This *hack* checks if the current instance of test cluster configuration has the passed<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * parameterized configs. In such a case, we can just reuse the cluster for test and do not need<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * to initialize from scratch. While this is a hack, it saves a ton of time for the full<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * test and de-flakes it.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private static boolean isSameParameterizedCluster(Class&lt;?&gt; registryImpl, int numHedgedReqs) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // initialize() is called for every unit test, however we only want to reset the cluster state<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // at the end of every parameterized run.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (TEST_UTIL == null) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      return false;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    Class&lt;?&gt; confClass = conf.getClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      ZKConnectionRegistry.class);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    int hedgedReqConfig = conf.getInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_DEFAULT);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return confClass.getName().equals(registryImpl.getName()) &amp;&amp; numHedgedReqs == hedgedReqConfig;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public TestScannersFromClientSide(Class&lt;?&gt; registryImpl, int numHedgedReqs) throws Exception {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (isSameParameterizedCluster(registryImpl, numHedgedReqs)) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (TEST_UTIL != null) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      // We reached the end of a parameterized run, clean up the cluster.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    conf.setLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY, 10 * 1024 * 1024);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    conf.setClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, registryImpl,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        ConnectionRegistry.class);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Preconditions.checkArgument(numHedgedReqs &gt; 0);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    conf.setInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY, numHedgedReqs);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    StartMiniClusterOption.Builder builder = StartMiniClusterOption.builder();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // Multiple masters needed only when hedged reads for master registry are enabled.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    builder.numMasters(numHedgedReqs &gt; 1 ? 3 : 1).numRegionServers(3);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    TEST_UTIL.startMiniCluster(builder.build());<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * Test from client side for batch of scan<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Test<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public void testScanBatch() throws Exception {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    final TableName tableName = name.getTableName();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 8);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Put put;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    Scan scan;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Delete delete;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Result result;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ResultScanner scanner;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    boolean toLog = true;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    List&lt;Cell&gt; kvListExp;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // table: row, family, c0:0, c1:1, ... , c7:7<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    put = new Put(ROW);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      put.add(kv);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    ht.put(put);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // table: row, family, c0:0, c1:1, ..., c6:2, c6:6 , c7:7<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    put = new Put(ROW);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[6], 2, VALUE);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    put.add(kv);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    ht.put(put);<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // delete upto ts: 3<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    delete = new Delete(ROW);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    delete.addFamily(FAMILY, 3);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    ht.delete(delete);<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // without batch<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    scan = new Scan().withStartRow(ROW);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    scan.readAllVersions();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    scanner = ht.getScanner(scan);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    // c4:4, c5:5, c6:6, c7:7<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    result = scanner.next();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // with batch<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    scan =  new Scan().withStartRow(ROW);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    scan.readAllVersions();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    scan.setBatch(2);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    scanner = ht.getScanner(scan);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // First batch: c4:4, c5:5<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    result = scanner.next();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // Second batch: c6:6, c7:7<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    result = scanner.next();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    verifyResult(result, kvListExp, toLog, "Testing second batch of scan");<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Test<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public void testMaxResultSizeIsSetToDefault() throws Exception {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    final TableName tableName = name.getTableName();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // The max result size we expect the scan to use by default.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    long expectedMaxResultSize =<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        TEST_UTIL.getConfiguration().getLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          HConstants.DEFAULT_HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    int numRows = 5;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    int numQualifiers = 10;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // Specify the cell size such that a single row will be larger than the default<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    // value of maxResultSize. This means that Scan RPCs should return at most a single<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // result back to the client.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    int cellSize = (int) (expectedMaxResultSize / (numQualifiers - 1));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    byte[] cellValue = Bytes.createMaxByteArray(cellSize);<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    Put put;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      put = new Put(ROWS[row]);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], cellValue);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        put.add(kv);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      puts.add(put);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    ht.put(puts);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // Create a scan with the default configuration.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    Scan scan = new Scan();<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      assertThat(scanner, instanceOf(AsyncTableResultScanner.class));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      scanner.next();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      AsyncTableResultScanner s = (AsyncTableResultScanner) scanner;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      // The scanner should have, at most, a single result in its cache. If there more results<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      // exists<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      // in the cache it means that more than the expected max result size was fetched.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      assertTrue("The cache contains: " + s.getCacheSize() + " results", s.getCacheSize() &lt;= 1);<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><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Scan on not existing table should throw the exception with correct message<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  @Test<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public void testScannerForNotExistingTable() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    String[] tableNames = {"A", "Z", "A:A", "Z:Z"};<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    for(String tableName : tableNames) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        Table table = TEST_UTIL.getConnection().getTable(TableName.valueOf(tableName));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        testSmallScan(table, true, 1, 5);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        fail("TableNotFoundException was not thrown");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      } catch (TableNotFoundException e) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        // We expect that the message for TableNotFoundException would have only the table name only<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        // Otherwise that would mean that localeRegionInMeta doesn't work properly<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        assertEquals(e.getMessage(), tableName);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      } catch (Exception e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        fail("Unexpected exception " + e.getMessage());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testSmallScan() throws Exception {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final TableName tableName = name.getTableName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    int numRows = 10;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    int numQualifiers = 10;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    Put put;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      put = new Put(ROWS[row]);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], VALUE);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        put.add(kv);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      puts.add(put);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ht.put(puts);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    int expectedRows = numRows;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    int expectedCols = numRows * numQualifiers;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    // Test normal and reversed<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    testSmallScan(ht, true, expectedRows, expectedCols);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    testSmallScan(ht, false, expectedRows, expectedCols);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Run through a variety of test configurations with a small scan<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private void testSmallScan(<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Table table, boolean reversed, int rows, int columns) throws Exception {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    Scan baseScan = new Scan();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    baseScan.setReversed(reversed);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    baseScan.setSmall(true);<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    Scan scan = new Scan(baseScan);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    scan = new Scan(baseScan);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    scan.setMaxResultSize(1);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>    scan = new Scan(baseScan);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    scan.setMaxResultSize(1);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private void verifyExpectedCounts(Table table, Scan scan, int expectedRowCount,<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      int expectedCellCount) throws Exception {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    ResultScanner scanner = table.getScanner(scan);<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    int rowCount = 0;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    int cellCount = 0;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    Result r = null;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    while ((r = scanner.next()) != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      rowCount++;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      cellCount += r.rawCells().length;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    assertTrue("Expected row count: " + expectedRowCount + " Actual row count: " + rowCount,<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        expectedRowCount == rowCount);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    assertTrue("Expected cell count: " + expectedCellCount + " Actual cell count: " + cellCount,<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        expectedCellCount == cellCount);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * Test from client side for get with maxResultPerCF set<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   */<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @Test<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public void testGetMaxResults() throws Exception {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final TableName tableName = name.getTableName();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>    Get get;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    Put put;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    Result result;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    boolean toLog = true;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    List&lt;Cell&gt; kvListExp;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Insert one CF for row[0]<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    put = new Put(ROW);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    for (int i=0; i &lt; 10; i++) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      put.add(kv);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      kvListExp.add(kv);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    ht.put(put);<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    get = new Get(ROW);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    result = ht.get(get);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    verifyResult(result, kvListExp, toLog, "Testing without setting maxResults");<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    get = new Get(ROW);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    result = ht.get(get);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[0], 1, VALUE));<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    verifyResult(result, kvListExp, toLog, "Testing basic setMaxResults");<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // Filters: ColumnRangeFilter<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    get = new Get(ROW);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.417"></a>
-<span class="sourceLineNo">418</span>                                        true));<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    result = ht.get(get);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[2], 1, VALUE));<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    verifyResult(result, kvListExp, toLog, "Testing single CF with CRF");<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    // Insert two more CF for row[0]<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // 20 columns for CF2, 10 columns for CF1<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    put = new Put(ROW);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      put.add(kv);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    ht.put(put);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    put = new Put(ROW);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (int i=0; i &lt; 10; i++) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      put.add(kv);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    ht.put(put);<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    get = new Get(ROW);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    get.setMaxResultsPerColumnFamily(12);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    get.addFamily(FAMILIES[1]);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    get.addFamily(FAMILIES[2]);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    result = ht.get(get);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    //Exp: CF1:q0, ..., q9, CF2: q0, q1, q10, q11, ..., q19<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    for (int i=0; i &lt; 10; i++) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (int i=0; i &lt; 2; i++) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (int i=10; i &lt; 20; i++) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs");<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    // Filters: ColumnRangeFilter and ColumnPrefixFilter<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    get = new Get(ROW);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    get.setMaxResultsPerColumnFamily(3);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, null, true));<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    result = ht.get(get);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    for (int i=2; i &lt; 5; i++) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (int i=2; i &lt; 5; i++) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    for (int i=2; i &lt; 5; i++) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + CRF");<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    get = new Get(ROW);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    get.setMaxResultsPerColumnFamily(7);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    get.setFilter(new ColumnPrefixFilter(QUALIFIERS[1]));<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    result = ht.get(get);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[1], 1, VALUE));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[1], 1, VALUE));<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    for (int i=10; i &lt; 16; i++) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + PFF");<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Test from client side for scan with maxResultPerCF set<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Test<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void testScanMaxResults() throws Exception {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    final TableName tableName = name.getTableName();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    byte [][] ROWS = HTestConst.makeNAscii(ROW, 2);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 10);<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>    Put put;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    Scan scan;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    Result result;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    boolean toLog = true;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    List&lt;Cell&gt; kvListExp, kvListScan;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (int r=0; r &lt; ROWS.length; r++) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      put = new Put(ROWS[r]);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (int c=0; c &lt; FAMILIES.length; c++) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        for (int q=0; q &lt; QUALIFIERS.length; q++) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          KeyValue kv = new KeyValue(ROWS[r], FAMILIES[c], QUALIFIERS[q], 1, VALUE);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          put.add(kv);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          if (q &lt; 4) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            kvListExp.add(kv);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      ht.put(put);<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>    scan = new Scan();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    scan.setMaxResultsPerColumnFamily(4);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ResultScanner scanner = ht.getScanner(scan);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    kvListScan = new ArrayList&lt;&gt;();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    while ((result = scanner.next()) != null) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Cell kv : result.listCells()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        kvListScan.add(kv);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    result = Result.create(kvListScan);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    verifyResult(result, kvListExp, toLog, "Testing scan with maxResults");<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  /**<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * Test from client side for get with rowOffset<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   */<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  @Test<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public void testGetRowOffset() throws Exception {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    final TableName tableName = name.getTableName();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    Get get;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    Put put;<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    Result result;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    boolean toLog = true;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    List&lt;Cell&gt; kvListExp;<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Insert one CF for row<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    put = new Put(ROW);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    for (int i=0; i &lt; 10; i++) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      put.add(kv);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // skipping first two kvs<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (i &lt; 2) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        continue;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      kvListExp.add(kv);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    ht.put(put);<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>    //setting offset to 2<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    get = new Get(ROW);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    get.setRowOffsetPerColumnFamily(2);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    result = ht.get(get);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    verifyResult(result, kvListExp, toLog, "Testing basic setRowOffset");<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    //setting offset to 20<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    get = new Get(ROW);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    get.setRowOffsetPerColumnFamily(20);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    result = ht.get(get);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    verifyResult(result, kvListExp, toLog, "Testing offset &gt; #kvs");<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    //offset + maxResultPerCF<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    get = new Get(ROW);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    result = ht.get(get);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    for (int i=4; i &lt; 9; i++) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    verifyResult(result, kvListExp, toLog,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      "Testing offset + setMaxResultsPerCF");<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>    // Filters: ColumnRangeFilter<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    get = new Get(ROW);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    get.setRowOffsetPerColumnFamily(1);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                                        true));<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    result = ht.get(get);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    verifyResult(result, kvListExp, toLog, "Testing offset with CRF");<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>    // Insert into two more CFs for row<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    // 10 columns for CF2, 10 columns for CF1<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    for(int j=2; j &gt; 0; j--) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      put = new Put(ROW);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      for (int i=0; i &lt; 10; i++) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        KeyValue kv = new KeyValue(ROW, FAMILIES[j], QUALIFIERS[i], 1, VALUE);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        put.add(kv);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      ht.put(put);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>    get = new Get(ROW);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    get.addFamily(FAMILIES[1]);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    get.addFamily(FAMILIES[2]);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    result = ht.get(get);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    //Exp: CF1:q4, q5, CF2: q4, q5<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[4], 1, VALUE));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[5], 1, VALUE));<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[4], 1, VALUE));<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[5], 1, VALUE));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    verifyResult(result, kvListExp, toLog,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>       "Testing offset + multiple CFs + maxResults");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  @Test<a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public void testScanRawDeleteFamilyVersion() throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    TableName tableName = name.getTableName();<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    conf.set(RPC_CODEC_CONF_KEY, "");<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    conf.set(DEFAULT_CODEC_CLASS, "");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Table table = connection.getTable(tableName)) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      Delete delete = new Delete(ROW);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      delete.addFamilyVersion(FAMILY, 0L);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      table.delete(delete);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      Scan scan = new Scan().withStartRow(ROW).setRaw(true);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      int count = 0;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      while (scanner.next() != null) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        count++;<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      assertEquals(1, count);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      TEST_UTIL.deleteTable(tableName);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Test from client side for scan while the region is reopened<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * on the same region server.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  @Test<a name="line.664"></a>
-<span class="sourceLineNo">665</span>  public void testScanOnReopenedRegion() throws Exception {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    final TableName tableName = name.getTableName();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 2);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    Put put;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    Scan scan;<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    Result result;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    ResultScanner scanner;<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    boolean toLog = false;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    List&lt;Cell&gt; kvListExp;<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>    // table: row, family, c0:0, c1:1<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    put = new Put(ROW);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      put.add(kv);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    ht.put(put);<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    scan = new Scan().withStartRow(ROW);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    scanner = ht.getScanner(scan);<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span>    HRegionLocation loc;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>    try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      loc = locator.getRegionLocation(ROW);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    RegionInfo hri = loc.getRegion();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    byte[] regionName = hri.getRegionName();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    int i = cluster.getServerWith(regionName);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    HRegionServer rs = cluster.getRegionServer(i);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    LOG.info("Unassigning " + hri);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    TEST_UTIL.getAdmin().unassign(hri.getRegionName(), true);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    long startTime = EnvironmentEdgeManager.currentTime();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    long timeOut = 10000;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    boolean offline = false;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    while (true) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (rs.getOnlineRegion(regionName) == null) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        offline = true;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        break;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      assertTrue("Timed out in closing the testing region",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    assertTrue(offline);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    LOG.info("Assigning " + hri);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    TEST_UTIL.getAdmin().assign(hri.getRegionName());<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    startTime = EnvironmentEdgeManager.currentTime();<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    while (true) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      rs = cluster.getRegionServer(cluster.getServerWith(regionName));<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      if (rs != null &amp;&amp; rs.getOnlineRegion(regionName) != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        offline = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        break;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      assertTrue("Timed out in open the testing region",<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    assertFalse(offline);<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // c0:0, c1:1<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[0], 0, VALUE));<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[1], 1, VALUE));<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    result = scanner.next();<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    verifyResult(result, kvListExp, toLog, "Testing scan on re-opened region");<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  static void verifyResult(Result result, List&lt;Cell&gt; expKvList, boolean toLog,<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      String msg) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>    LOG.info(msg);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    LOG.info("Expected count: " + expKvList.size());<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    LOG.info("Actual count: " + result.size());<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    if (expKvList.isEmpty()) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      return;<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>    int i = 0;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    for (Cell kv : result.rawCells()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (i &gt;= expKvList.size()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        break;  // we will check the size later<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      Cell kvExp = expKvList.get(i++);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (toLog) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        LOG.info("get kv is: " + kv.toString());<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        LOG.info("exp kv is: " + kvExp.toString());<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      assertTrue("Not equal", kvExp.equals(kv));<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span>    assertEquals(expKvList.size(), result.size());<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  @Test<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  public void testReadExpiredDataForRawScan() throws IOException {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    TableName tableName = name.getTableName();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    long ts = EnvironmentEdgeManager.currentTime() - 10000;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    byte[] value = Bytes.toBytes("expired");<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, ts, value));<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      assertArrayEquals(value, table.get(new Get(ROW)).getValue(FAMILY, QUALIFIER));<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      TEST_UTIL.getAdmin().modifyColumnFamily(tableName,<a name="line.770"></a>
-<span class="sourceLineNo">771</span>        ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).setTimeToLive(5).build());<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      try (ResultScanner scanner = table.getScanner(FAMILY)) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        assertNull(scanner.next());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      try (ResultScanner scanner = table.getScanner(new Scan().setRaw(true))) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        assertArrayEquals(value, scanner.next().getValue(FAMILY, QUALIFIER));<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        assertNull(scanner.next());<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  @Test<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  public void testScanWithColumnsAndFilterAndVersion() throws IOException {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    TableName tableName = name.getTableName();<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 4)) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      for (int i = 0; i &lt; 4; i++) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        Put put = new Put(ROW);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        put.addColumn(FAMILY, QUALIFIER, now + i, VALUE);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        table.put(put);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>      Scan scan = new Scan();<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFIER)));<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      scan.readVersions(3);<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        Result result = scanner.next();<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        assertEquals(3, result.size());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      }<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><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  @Test<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  public void testScanWithSameStartRowStopRow() throws IOException {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    TableName tableName = name.getTableName();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE));<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>      Scan scan = new Scan().withStartRow(ROW).withStopRow(ROW);<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        assertNull(scanner.next());<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>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, true);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        Result result = scanner.next();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>        assertNotNull(result);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        assertArrayEquals(ROW, result.getRow());<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        assertArrayEquals(VALUE, result.getValue(FAMILY, QUALIFIER));<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        assertNull(scanner.next());<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, false);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        assertNull(scanner.next());<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, false);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        assertNull(scanner.next());<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      }<a name="line.833"></a>
-<span class="sourceLineNo">834</span><a name="line.834"></a>
-<span class="sourceLineNo">835</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, true);<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>        assertNull(scanner.next());<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>  }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>  @Test<a name="line.842"></a>
-<span class="sourceLineNo">843</span>  public void testReverseScanWithFlush() throws Exception {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    TableName tableName = name.getTableName();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    final int BATCH_SIZE = 10;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    final int ROWS_TO_INSERT = 100;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    final byte[] LARGE_VALUE = generateHugeValue(128 * 1024);<a name="line.847"></a>
-<span class="sourceLineNo">848</span><a name="line.848"></a>
-<span class="sourceLineNo">849</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      Admin admin = TEST_UTIL.getAdmin()) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      List&lt;Put&gt; putList = new ArrayList&lt;&gt;();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      for (long i = 0; i &lt; ROWS_TO_INSERT; i++) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        put.addColumn(FAMILY, QUALIFIER, LARGE_VALUE);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        putList.add(put);<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>        if (putList.size() &gt;= BATCH_SIZE) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          table.put(putList);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>          admin.flush(tableName);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          putList.clear();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>        }<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>      if (!putList.isEmpty()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        table.put(putList);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>        admin.flush(tableName);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        putList.clear();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      }<a name="line.868"></a>
-<span class="sourceLineNo">869</span><a name="line.869"></a>
-<span class="sourceLineNo">870</span>      Scan scan = new Scan();<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      scan.setReversed(true);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      int count = 0;<a name="line.872"></a>
-<span class="sourceLineNo">873</span><a name="line.873"></a>
-<span class="sourceLineNo">874</span>      try (ResultScanner results = table.getScanner(scan)) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        for (Result result : results) {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          count++;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      assertEquals("Expected " + ROWS_TO_INSERT + " rows in the table but it is " + count,<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        ROWS_TO_INSERT, count);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<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>  @Test<a name="line.884"></a>
-<span class="sourceLineNo">885</span>  public void testScannerWithPartialResults() throws Exception {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    TableName tableName = TableName.valueOf("testScannerWithPartialResults");<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    try (Table table = TEST_UTIL.createMultiRegionTable(tableName,<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      Bytes.toBytes("c"), 4)) {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      byte[] largeArray = new byte[10000];<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      Put put = new Put(Bytes.toBytes("aaaa0"));<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), Bytes.toBytes("2"));<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), Bytes.toBytes("3"));<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("4"), Bytes.toBytes("4"));<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      puts.add(put);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      put = new Put(Bytes.toBytes("aaaa1"));<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), largeArray);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), largeArray);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      puts.add(put);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      table.put(puts);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      Scan scan = new Scan();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      scan.addFamily(Bytes.toBytes("c"));<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName.getName());<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      scan.setMaxResultSize(10001);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      scan.withStopRow(Bytes.toBytes("bbbb"));<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      scan.setFilter(new LimitKVsReturnFilter());<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      ResultScanner rs = table.getScanner(scan);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      Result result;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      int expectedKvNumber = 6;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      int returnedKvNumber = 0;<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      while((result = rs.next()) != null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        returnedKvNumber += result.listCells().size();<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      }<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      rs.close();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      assertEquals(expectedKvNumber, returnedKvNumber);<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><a name="line.920"></a>
-<span class="sourceLineNo">921</span>  public static class LimitKVsReturnFilter extends FilterBase {<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    private int cellCount = 0;<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>    @Override<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    public ReturnCode filterCell(Cell v) throws IOException {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      if (cellCount &gt;= 6) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        cellCount++;<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        return ReturnCode.SKIP;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      }<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      cellCount++;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      return ReturnCode.INCLUDE;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    @Override<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    public boolean filterAllRemaining() throws IOException {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      if (cellCount &lt; 7) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>        return false;<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      cellCount++;<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      return true;<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>    @Override<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    public String toString() {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      return this.getClass().getSimpleName();<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>    public static LimitKVsReturnFilter parseFrom(final byte [] pbBytes)<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        throws DeserializationException {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      return new LimitKVsReturnFilter();<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span>}<a name="line.954"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.filter.ColumnRangeFilter;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.filter.QualifierFilter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.AfterClass;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.ClassRule;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Rule;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.Test;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.experimental.categories.Category;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.runner.RunWith;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.runners.Parameterized;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>/**<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * A client-side test, mostly testing scanners with various parameters. Parameterized on different<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * registry implementations.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>@Category({MediumTests.class, ClientTests.class})<a name="line.80"></a>
+<span class="sourceLineNo">081</span>@RunWith(Parameterized.class)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>public class TestScannersFromClientSide {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  @ClassRule<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      HBaseClassTestRule.forClass(TestScannersFromClientSide.class);<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestScannersFromClientSide.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static byte [] ROW = Bytes.toBytes("testRow");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static byte [] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private static byte [] VALUE = Bytes.toBytes("testValue");<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Rule<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @AfterClass<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static void tearDownAfterClass() throws Exception {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (TEST_UTIL != null) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @Parameterized.Parameters<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return Arrays.asList(new Object[][] {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        { MasterRegistry.class, 1},<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        { MasterRegistry.class, 2},<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        { ZKConnectionRegistry.class, 1}<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    });<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * JUnit does not provide an easy way to run a hook after each parameterized run. Without that<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * there is no easy way to restart the test cluster after each parameterized run. Annotation<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * BeforeParam does not work either because it runs before parameterization and hence does not<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * have access to the test parameters (which is weird).<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   *<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * This *hack* checks if the current instance of test cluster configuration has the passed<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * parameterized configs. In such a case, we can just reuse the cluster for test and do not need<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * to initialize from scratch. While this is a hack, it saves a ton of time for the full<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * test and de-flakes it.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private static boolean isSameParameterizedCluster(Class&lt;?&gt; registryImpl, int numHedgedReqs) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // initialize() is called for every unit test, however we only want to reset the cluster state<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // at the end of every parameterized run.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (TEST_UTIL == null) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      return false;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Class&lt;?&gt; confClass = conf.getClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ZKConnectionRegistry.class);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    int hedgedReqConfig = conf.getInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY,<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_DEFAULT);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return confClass.getName().equals(registryImpl.getName()) &amp;&amp; numHedgedReqs == hedgedReqConfig;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public TestScannersFromClientSide(Class&lt;?&gt; registryImpl, int numHedgedReqs) throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    if (isSameParameterizedCluster(registryImpl, numHedgedReqs)) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      return;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (TEST_UTIL != null) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      // We reached the end of a parameterized run, clean up the cluster.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      TEST_UTIL.shutdownMiniCluster();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    conf.setLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY, 10 * 1024 * 1024);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    conf.setClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, registryImpl,<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        ConnectionRegistry.class);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Preconditions.checkArgument(numHedgedReqs &gt; 0);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    conf.setInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY, numHedgedReqs);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    StartMiniClusterOption.Builder builder = StartMiniClusterOption.builder();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Multiple masters needed only when hedged reads for master registry are enabled.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    builder.numMasters(numHedgedReqs &gt; 1 ? 3 : 1).numRegionServers(3);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    TEST_UTIL.startMiniCluster(builder.build());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * Test from client side for batch of scan<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  @Test<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public void testScanBatch() throws Exception {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    final TableName tableName = name.getTableName();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 8);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Put put;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Scan scan;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    Delete delete;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Result result;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ResultScanner scanner;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    boolean toLog = true;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    List&lt;Cell&gt; kvListExp;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // table: row, family, c0:0, c1:1, ... , c7:7<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    put = new Put(ROW);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      put.add(kv);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    ht.put(put);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // table: row, family, c0:0, c1:1, ..., c6:2, c6:6 , c7:7<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    put = new Put(ROW);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[6], 2, VALUE);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    put.add(kv);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ht.put(put);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // delete upto ts: 3<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    delete = new Delete(ROW);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    delete.addFamily(FAMILY, 3);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    ht.delete(delete);<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // without batch<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    scan = new Scan().withStartRow(ROW);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    scan.readAllVersions();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    scanner = ht.getScanner(scan);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // c4:4, c5:5, c6:6, c7:7<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    result = scanner.next();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // with batch<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    scan =  new Scan().withStartRow(ROW);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    scan.readAllVersions();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    scan.setBatch(2);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    scanner = ht.getScanner(scan);<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // First batch: c4:4, c5:5<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[4], 4, VALUE));<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[5], 5, VALUE));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    result = scanner.next();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    verifyResult(result, kvListExp, toLog, "Testing first batch of scan");<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    // Second batch: c6:6, c7:7<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[6], 6, VALUE));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[7], 7, VALUE));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    result = scanner.next();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    verifyResult(result, kvListExp, toLog, "Testing second batch of scan");<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Test<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public void testMaxResultSizeIsSetToDefault() throws Exception {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    final TableName tableName = name.getTableName();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // The max result size we expect the scan to use by default.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long expectedMaxResultSize =<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        TEST_UTIL.getConfiguration().getLong(HConstants.HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          HConstants.DEFAULT_HBASE_CLIENT_SCANNER_MAX_RESULT_SIZE);<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>    int numRows = 5;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    int numQualifiers = 10;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // Specify the cell size such that a single row will be larger than the default<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // value of maxResultSize. This means that Scan RPCs should return at most a single<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // result back to the client.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    int cellSize = (int) (expectedMaxResultSize / (numQualifiers - 1));<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    byte[] cellValue = Bytes.createMaxByteArray(cellSize);<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    Put put;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      put = new Put(ROWS[row]);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], cellValue);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        put.add(kv);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      puts.add(put);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    ht.put(puts);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // Create a scan with the default configuration.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    Scan scan = new Scan();<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    try (ResultScanner scanner = ht.getScanner(scan)) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      assertThat(scanner, instanceOf(AsyncTableResultScanner.class));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      scanner.next();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      AsyncTableResultScanner s = (AsyncTableResultScanner) scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      // The scanner should have, at most, a single result in its cache. If there more results<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      // exists<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      // in the cache it means that more than the expected max result size was fetched.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      assertTrue("The cache contains: " + s.getCacheSize() + " results", s.getCacheSize() &lt;= 1);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * Scan on not existing table should throw the exception with correct message<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Test<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public void testScannerForNotExistingTable() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    String[] tableNames = {"A", "Z", "A:A", "Z:Z"};<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    for(String tableName : tableNames) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        Table table = TEST_UTIL.getConnection().getTable(TableName.valueOf(tableName));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        testSmallScan(table, true, 1, 5);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        fail("TableNotFoundException was not thrown");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      } catch (TableNotFoundException e) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        // We expect that the message for TableNotFoundException would have only the table name only<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // Otherwise that would mean that localeRegionInMeta doesn't work properly<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        assertEquals(e.getMessage(), tableName);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (Exception e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        fail("Unexpected exception " + e.getMessage());<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @Test<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public void testSmallScan() throws Exception {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final TableName tableName = name.getTableName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    int numRows = 10;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    byte[][] ROWS = HTestConst.makeNAscii(ROW, numRows);<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    int numQualifiers = 10;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, numQualifiers);<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Put put;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    for (int row = 0; row &lt; ROWS.length; row++) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      put = new Put(ROWS[row]);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      for (int qual = 0; qual &lt; QUALIFIERS.length; qual++) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        KeyValue kv = new KeyValue(ROWS[row], FAMILY, QUALIFIERS[qual], VALUE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        put.add(kv);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      puts.add(put);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ht.put(puts);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    int expectedRows = numRows;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    int expectedCols = numRows * numQualifiers;<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>    // Test normal and reversed<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    testSmallScan(ht, true, expectedRows, expectedCols);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    testSmallScan(ht, false, expectedRows, expectedCols);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  }<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>   * Run through a variety of test configurations with a small scan<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private void testSmallScan(<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      Table table, boolean reversed, int rows, int columns) throws Exception {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    Scan baseScan = new Scan();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    baseScan.setReversed(reversed);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    baseScan.setReadType(ReadType.PREAD);<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    Scan scan = new Scan(baseScan);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    scan = new Scan(baseScan);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    scan.setMaxResultSize(1);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    scan = new Scan(baseScan);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    scan.setMaxResultSize(1);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verifyExpectedCounts(table, scan, rows, columns);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private void verifyExpectedCounts(Table table, Scan scan, int expectedRowCount,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      int expectedCellCount) throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    ResultScanner scanner = table.getScanner(scan);<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    int rowCount = 0;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    int cellCount = 0;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    Result r = null;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    while ((r = scanner.next()) != null) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      rowCount++;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      cellCount += r.rawCells().length;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    assertTrue("Expected row count: " + expectedRowCount + " Actual row count: " + rowCount,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        expectedRowCount == rowCount);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    assertTrue("Expected cell count: " + expectedCellCount + " Actual cell count: " + cellCount,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        expectedCellCount == cellCount);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    scanner.close();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Test from client side for get with maxResultPerCF set<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  @Test<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public void testGetMaxResults() throws Exception {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final TableName tableName = name.getTableName();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>    Get get;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    Put put;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    Result result;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    boolean toLog = true;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    List&lt;Cell&gt; kvListExp;<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Insert one CF for row[0]<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    put = new Put(ROW);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    for (int i=0; i &lt; 10; i++) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      put.add(kv);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      kvListExp.add(kv);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    ht.put(put);<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>    get = new Get(ROW);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    result = ht.get(get);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    verifyResult(result, kvListExp, toLog, "Testing without setting maxResults");<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    get = new Get(ROW);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    result = ht.get(get);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[0], 1, VALUE));<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    verifyResult(result, kvListExp, toLog, "Testing basic setMaxResults");<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>    // Filters: ColumnRangeFilter<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    get = new Get(ROW);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.418"></a>
+<span class="sourceLineNo">419</span>                                        true));<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    result = ht.get(get);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[2], 1, VALUE));<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    verifyResult(result, kvListExp, toLog, "Testing single CF with CRF");<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Insert two more CF for row[0]<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    // 20 columns for CF2, 10 columns for CF1<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    put = new Put(ROW);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      put.add(kv);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    ht.put(put);<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    put = new Put(ROW);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    for (int i=0; i &lt; 10; i++) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      put.add(kv);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    ht.put(put);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    get = new Get(ROW);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    get.setMaxResultsPerColumnFamily(12);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    get.addFamily(FAMILIES[1]);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    get.addFamily(FAMILIES[2]);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    result = ht.get(get);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    //Exp: CF1:q0, ..., q9, CF2: q0, q1, q10, q11, ..., q19<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (int i=0; i &lt; 10; i++) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (int i=0; i &lt; 2; i++) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    for (int i=10; i &lt; 20; i++) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs");<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    // Filters: ColumnRangeFilter and ColumnPrefixFilter<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    get = new Get(ROW);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    get.setMaxResultsPerColumnFamily(3);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, null, true));<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    result = ht.get(get);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    for (int i=2; i &lt; 5; i++) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    for (int i=2; i &lt; 5; i++) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[i], 1, VALUE));<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    for (int i=2; i &lt; 5; i++) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + CRF");<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    get = new Get(ROW);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    get.setMaxResultsPerColumnFamily(7);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    get.setFilter(new ColumnPrefixFilter(QUALIFIERS[1]));<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    result = ht.get(get);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[1], 1, VALUE));<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[1], 1, VALUE));<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[1], 1, VALUE));<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    for (int i=10; i &lt; 16; i++) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[i], 1, VALUE));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    verifyResult(result, kvListExp, toLog, "Testing multiple CFs + PFF");<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * Test from client side for scan with maxResultPerCF set<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Test<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public void testScanMaxResults() throws Exception {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    final TableName tableName = name.getTableName();<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    byte [][] ROWS = HTestConst.makeNAscii(ROW, 2);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 10);<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span>    Put put;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Scan scan;<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    Result result;<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    boolean toLog = true;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    List&lt;Cell&gt; kvListExp, kvListScan;<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>    for (int r=0; r &lt; ROWS.length; r++) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      put = new Put(ROWS[r]);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      for (int c=0; c &lt; FAMILIES.length; c++) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        for (int q=0; q &lt; QUALIFIERS.length; q++) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          KeyValue kv = new KeyValue(ROWS[r], FAMILIES[c], QUALIFIERS[q], 1, VALUE);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          put.add(kv);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          if (q &lt; 4) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>            kvListExp.add(kv);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>          }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      ht.put(put);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>    scan = new Scan();<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    scan.setMaxResultsPerColumnFamily(4);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    ResultScanner scanner = ht.getScanner(scan);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    kvListScan = new ArrayList&lt;&gt;();<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    while ((result = scanner.next()) != null) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      for (Cell kv : result.listCells()) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        kvListScan.add(kv);<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      }<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    result = Result.create(kvListScan);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    verifyResult(result, kvListExp, toLog, "Testing scan with maxResults");<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>  /**<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * Test from client side for get with rowOffset<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  @Test<a name="line.545"></a>
+<span class="sourceLineNo">546</span>  public void testGetRowOffset() throws Exception {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    final TableName tableName = name.getTableName();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    byte [][] FAMILIES = HTestConst.makeNAscii(FAMILY, 3);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 20);<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILIES);<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    Get get;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    Put put;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    Result result;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    boolean toLog = true;<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    List&lt;Cell&gt; kvListExp;<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    // Insert one CF for row<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    put = new Put(ROW);<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    for (int i=0; i &lt; 10; i++) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      KeyValue kv = new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE);<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      put.add(kv);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      // skipping first two kvs<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      if (i &lt; 2) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        continue;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      }<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      kvListExp.add(kv);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    ht.put(put);<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>    //setting offset to 2<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    get = new Get(ROW);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    get.setRowOffsetPerColumnFamily(2);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    result = ht.get(get);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    verifyResult(result, kvListExp, toLog, "Testing basic setRowOffset");<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>    //setting offset to 20<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    get = new Get(ROW);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    get.setRowOffsetPerColumnFamily(20);<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    result = ht.get(get);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    verifyResult(result, kvListExp, toLog, "Testing offset &gt; #kvs");<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    //offset + maxResultPerCF<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    get = new Get(ROW);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    get.setMaxResultsPerColumnFamily(5);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    result = ht.get(get);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    for (int i=4; i &lt; 9; i++) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[i], 1, VALUE));<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    verifyResult(result, kvListExp, toLog,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      "Testing offset + setMaxResultsPerCF");<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    // Filters: ColumnRangeFilter<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    get = new Get(ROW);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    get.setRowOffsetPerColumnFamily(1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    get.setFilter(new ColumnRangeFilter(QUALIFIERS[2], true, QUALIFIERS[5],<a name="line.601"></a>
+<span class="sourceLineNo">602</span>                                        true));<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    result = ht.get(get);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[3], 1, VALUE));<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[4], 1, VALUE));<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[0], QUALIFIERS[5], 1, VALUE));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    verifyResult(result, kvListExp, toLog, "Testing offset with CRF");<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span>    // Insert into two more CFs for row<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    // 10 columns for CF2, 10 columns for CF1<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    for(int j=2; j &gt; 0; j--) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      put = new Put(ROW);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      for (int i=0; i &lt; 10; i++) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        KeyValue kv = new KeyValue(ROW, FAMILIES[j], QUALIFIERS[i], 1, VALUE);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        put.add(kv);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      ht.put(put);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>    get = new Get(ROW);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    get.setRowOffsetPerColumnFamily(4);<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    get.setMaxResultsPerColumnFamily(2);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    get.addFamily(FAMILIES[1]);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    get.addFamily(FAMILIES[2]);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    result = ht.get(get);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    //Exp: CF1:q4, q5, CF2: q4, q5<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[4], 1, VALUE));<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[1], QUALIFIERS[5], 1, VALUE));<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[4], 1, VALUE));<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    kvListExp.add(new KeyValue(ROW, FAMILIES[2], QUALIFIERS[5], 1, VALUE));<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    verifyResult(result, kvListExp, toLog,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>       "Testing offset + multiple CFs + maxResults");<a name="line.634"></a>
+<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>  @Test<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  public void testScanRawDeleteFamilyVersion() throws Exception {<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    TableName tableName = name.getTableName();<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    conf.set(RPC_CODEC_CONF_KEY, "");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    conf.set(DEFAULT_CODEC_CLASS, "");<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        Table table = connection.getTable(tableName)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      Delete delete = new Delete(ROW);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      delete.addFamilyVersion(FAMILY, 0L);<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      table.delete(delete);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      Scan scan = new Scan().withStartRow(ROW).setRaw(true);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      int count = 0;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      while (scanner.next() != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        count++;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      assertEquals(1, count);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    } finally {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      TEST_UTIL.deleteTable(tableName);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
+<span class="sourceLineNo">660</span><a name="line.660"></a>
+<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * Test from client side for scan while the region is reopened<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   * on the same region server.<a name="line.663"></a>
+<span class="sourceLineNo">664</span>   */<a name="line.664"></a>
+<span class="sourceLineNo">665</span>  @Test<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  public void testScanOnReopenedRegion() throws Exception {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    final TableName tableName = name.getTableName();<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    byte [][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 2);<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>    Table ht = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>    Put put;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    Scan scan;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    Result result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    ResultScanner scanner;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    boolean toLog = false;<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    List&lt;Cell&gt; kvListExp;<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>    // table: row, family, c0:0, c1:1<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    put = new Put(ROW);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    for (int i=0; i &lt; QUALIFIERS.length; i++) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      put.add(kv);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    ht.put(put);<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    scan = new Scan().withStartRow(ROW);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    scanner = ht.getScanner(scan);<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>    HRegionLocation loc;<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      loc = locator.getRegionLocation(ROW);<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    RegionInfo hri = loc.getRegion();<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    byte[] regionName = hri.getRegionName();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    int i = cluster.getServerWith(regionName);<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    HRegionServer rs = cluster.getRegionServer(i);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    LOG.info("Unassigning " + hri);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    TEST_UTIL.getAdmin().unassign(hri.getRegionName(), true);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    long startTime = EnvironmentEdgeManager.currentTime();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    long timeOut = 10000;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    boolean offline = false;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    while (true) {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      if (rs.getOnlineRegion(regionName) == null) {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>        offline = true;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        break;<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      assertTrue("Timed out in closing the testing region",<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    assertTrue(offline);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    LOG.info("Assigning " + hri);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    TEST_UTIL.getAdmin().assign(hri.getRegionName());<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    startTime = EnvironmentEdgeManager.currentTime();<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    while (true) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      rs = cluster.getRegionServer(cluster.getServerWith(regionName));<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (rs != null &amp;&amp; rs.getOnlineRegion(regionName) != null) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        offline = false;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        break;<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      assertTrue("Timed out in open the testing region",<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        EnvironmentEdgeManager.currentTime() &lt; startTime + timeOut);<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    assertFalse(offline);<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>    // c0:0, c1:1<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    kvListExp = new ArrayList&lt;&gt;();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[0], 0, VALUE));<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[1], 1, VALUE));<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    result = scanner.next();<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    verifyResult(result, kvListExp, toLog, "Testing scan on re-opened region");<a name="line.733"></a>
+<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>  static void verifyResult(Result result, List&lt;Cell&gt; expKvList, boolean toLog,<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      String msg) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>    LOG.info(msg);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    LOG.info("Expected count: " + expKvList.size());<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    LOG.info("Actual count: " + result.size());<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    if (expKvList.isEmpty()) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>      return;<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>    int i = 0;<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    for (Cell kv : result.rawCells()) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      if (i &gt;= expKvList.size()) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        break;  // we will check the size later<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>      Cell kvExp = expKvList.get(i++);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      if (toLog) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>        LOG.info("get kv is: " + kv.toString());<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        LOG.info("exp kv is: " + kvExp.toString());<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      assertTrue("Not equal", kvExp.equals(kv));<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
+<span class="sourceLineNo">759</span><a name="line.759"></a>
+<span class="sourceLineNo">760</span>    assertEquals(expKvList.size(), result.size());<a name="line.760"></a>
+<span class="sourceLineNo">761</span>  }<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>  @Test<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  public void testReadExpiredDataForRawScan() throws IOException {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    TableName tableName = name.getTableName();<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    long ts = EnvironmentEdgeManager.currentTime() - 10000;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    byte[] value = Bytes.toBytes("expired");<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, ts, value));<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      assertArrayEquals(value, table.get(new Get(ROW)).getValue(FAMILY, QUALIFIER));<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      TEST_UTIL.getAdmin().modifyColumnFamily(tableName,<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).setTimeToLive(5).build());<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      try (ResultScanner scanner = table.getScanner(FAMILY)) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        assertNull(scanner.next());<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      }<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      try (ResultScanner scanner = table.getScanner(new Scan().setRaw(true))) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        assertArrayEquals(value, scanner.next().getValue(FAMILY, QUALIFIER));<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        assertNull(scanner.next());<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
+<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">783</span>  @Test<a name="line.783"></a>
+<span class="sourceLineNo">784</span>  public void testScanWithColumnsAndFilterAndVersion() throws IOException {<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    TableName tableName = name.getTableName();<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY, 4)) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      for (int i = 0; i &lt; 4; i++) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        Put put = new Put(ROW);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>        put.addColumn(FAMILY, QUALIFIER, now + i, VALUE);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>        table.put(put);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
+<span class="sourceLineNo">793</span><a name="line.793"></a>
+<span class="sourceLineNo">794</span>      Scan scan = new Scan();<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      scan.addColumn(FAMILY, QUALIFIER);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFIER)));<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      scan.readVersions(3);<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>        Result result = scanner.next();<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        assertEquals(3, result.size());<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>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  @Test<a name="line.806"></a>
+<span class="sourceLineNo">807</span>  public void testScanWithSameStartRowStopRow() throws IOException {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    TableName tableName = name.getTableName();<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>      table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE));<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>      Scan scan = new Scan().withStartRow(ROW).withStopRow(ROW);<a name="line.812"></a>
+<span class="sourceLineNo">813</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.813"></a>
+<span class="sourceLineNo">814</span>        assertNull(scanner.next());<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      }<a name="line.815"></a>
+<span class="sourceLineNo">816</span><a name="line.816"></a>
+<span class="sourceLineNo">817</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, true);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>        Result result = scanner.next();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        assertNotNull(result);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>        assertArrayEquals(ROW, result.getRow());<a name="line.821"></a>
+<span class="sourceLineNo">822</span>        assertArrayEquals(VALUE, result.getValue(FAMILY, QUALIFIER));<a name="line.822"></a>
+<span class="sourceLineNo">823</span>        assertNull(scanner.next());<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>      scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, false);<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        assertNull(scanner.next());<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, false);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>        assertNull(scanner.next());<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>      scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, true);<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      try (ResultScanner scanner = table.getScanner(scan)) {<a name="line.837"></a>
+<span class="sourceLineNo">838</span>        assertNull(scanner.next());<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      }<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
+<span class="sourceLineNo">842</span><a name="line.842"></a>
+<span class="sourceLineNo">843</span>  @Test<a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public void testReverseScanWithFlush() throws Exception {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    TableName tableName = name.getTableName();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final int BATCH_SIZE = 10;<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    final int ROWS_TO_INSERT = 100;<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    final byte[] LARGE_VALUE = generateHugeValue(128 * 1024);<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span>    try (Table table = TEST_UTIL.createTable(tableName, FAMILY);<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      Admin admin = TEST_UTIL.getAdmin()) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      List&lt;Put&gt; putList = new ArrayList&lt;&gt;();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      for (long i = 0; i &lt; ROWS_TO_INSERT; i++) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        put.addColumn(FAMILY, QUALIFIER, LARGE_VALUE);<a name="line.855"></a>
+<span class="sourceLineNo">856</span>        putList.add(put);<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>        if (putList.size() &gt;= BATCH_SIZE) {<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          table.put(putList);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          admin.flush(tableName);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          putList.clear();<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><a name="line.864"></a>
+<span class="sourceLineNo">865</span>      if (!putList.isEmpty()) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        table.put(putList);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>        admin.flush(tableName);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>        putList.clear();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>      Scan scan = new Scan();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      scan.setReversed(true);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      int count = 0;<a name="line.873"></a>
+<span class="sourceLineNo">874</span><a name="line.874"></a>
+<span class="sourceLineNo">875</span>      try (ResultScanner results = table.getScanner(scan)) {<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        for (Result result : results) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>          count++;<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>      assertEquals("Expected " + ROWS_TO_INSERT + " rows in the table but it is " + count,<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        ROWS_TO_INSERT, count);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>    }<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
+<span class="sourceLineNo">884</span><a name="line.884"></a>
+<span class="sourceLineNo">885</span>  @Test<a name="line.885"></a>
+<span class="sourceLineNo">886</span>  public void testScannerWithPartialResults() throws Exception {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    TableName tableName = TableName.valueOf("testScannerWithPartialResults");<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    try (Table table = TEST_UTIL.createMultiRegionTable(tableName,<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      Bytes.toBytes("c"), 4)) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      byte[] largeArray = new byte[10000];<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      Put put = new Put(Bytes.toBytes("aaaa0"));<a name="line.892"></a>
+<span class="sourceLineNo">893</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), Bytes.toBytes("2"));<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), Bytes.toBytes("3"));<a name="line.895"></a>
+<span class="sourceLineNo">896</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("4"), Bytes.toBytes("4"));<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      puts.add(put);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>      put = new Put(Bytes.toBytes("aaaa1"));<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("1"), Bytes.toBytes("1"));<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("2"), largeArray);<a name="line.900"></a>
+<span class="sourceLineNo">901</span>      put.addColumn(Bytes.toBytes("c"), Bytes.toBytes("3"), largeArray);<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      puts.add(put);<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      table.put(puts);<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      Scan scan = new Scan();<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      scan.addFamily(Bytes.toBytes("c"));<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, tableName.getName());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>      scan.setMaxResultSize(10001);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>      scan.withStopRow(Bytes.toBytes("bbbb"));<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      scan.setFilter(new LimitKVsReturnFilter());<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      ResultScanner rs = table.getScanner(scan);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      Result result;<a name="line.911"></a>
+<span class="sourceLineNo">912</span>      int expectedKvNumber = 6;<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      int returnedKvNumber = 0;<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      while((result = rs.next()) != null) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>        returnedKvNumber += result.listCells().size();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>      }<a name="line.916"></a>
+<span class="sourceLineNo">917</span>      rs.close();<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      assertEquals(expectedKvNumber, returnedKvNumber);<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
+<span class="sourceLineNo">920</span>  }<a name="line.920"></a>
+<span class="sourceLineNo">921</span><a name="line.921"></a>
+<span class="sourceLineNo">922</span>  public static class LimitKVsReturnFilter extends FilterBase {<a name="line.922"></a>
+<span class="sourceLineNo">923</span><a name="line.923"></a>
+<span class="sourceLineNo">924</span>    private int cellCount = 0;<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>    @Override<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    public ReturnCode filterCell(Cell v) throws IOException {<a name="line.927"></a>
+<span class="sourceLineNo">928</span>      if (cellCount &gt;= 6) {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        cellCount++;<a name="line.929"></a>
+<span class="sourceLineNo">930</span>        return ReturnCode.SKIP;<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      }<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      cellCount++;<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      return ReturnCode.INCLUDE;<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>    @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    public boolean filterAllRemaining() throws IOException {<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      if (cellCount &lt; 7) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>        return false;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      }<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      cellCount++;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      return true;<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
+<span class="sourceLineNo">944</span><a name="line.944"></a>
+<span class="sourceLineNo">945</span>    @Override<a name="line.945"></a>
+<span class="sourceLineNo">946</span>    public String toString() {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      return this.getClass().getSimpleName();<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    public static LimitKVsReturnFilter parseFrom(final byte [] pbBytes)<a name="line.950"></a>
+<span class="sourceLineNo">951</span>        throws DeserializationException {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      return new LimitKVsReturnFilter();<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    }<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>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html
index b31283c..c136473 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSizeFailures.html
@@ -34,153 +34,154 @@
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableName;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.AfterClass;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.BeforeClass;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.ClassRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.Test;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.experimental.categories.Category;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>@Category(LargeTests.class)<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class TestSizeFailures {<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  @ClassRule<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.45"></a>
-<span class="sourceLineNo">046</span>      HBaseClassTestRule.forClass(TestSizeFailures.class);<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSizeFailures.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  protected static int SLAVES = 1;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private static TableName TABLENAME;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final int NUM_ROWS = 1000 * 1000, NUM_COLS = 9;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  @BeforeClass<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public static void setUpBeforeClass() throws Exception {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    // Uncomment the following lines if more verbosity is needed for<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    // debugging (see HBASE-12285 for details).<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    //((Log4JLogger)RpcServer.LOG).getLogger().setLevel(Level.ALL);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    //((Log4JLogger)RpcClient.LOG).getLogger().setLevel(Level.ALL);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    //((Log4JLogger)ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    TEST_UTIL.startMiniCluster(SLAVES);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>    // Write a bunch of data<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    TABLENAME = TableName.valueOf("testSizeFailures");<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    List&lt;byte[]&gt; qualifiers = new ArrayList&lt;&gt;();<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    for (int i = 1; i &lt;= 10; i++) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      qualifiers.add(Bytes.toBytes(Integer.toString(i)));<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TABLENAME)<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    byte[][] splits = new byte[9][2];<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    for (int i = 1; i &lt; 10; i++) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      int split = 48 + i;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      splits[i - 1][0] = (byte) (split &gt;&gt;&gt; 8);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      splits[i - 1][0] = (byte) (split);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    TEST_UTIL.getAdmin().createTable(tableDescriptor, splits);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      List&lt;Put&gt; puts = new LinkedList&lt;&gt;();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      for (int i = 0; i &lt; NUM_ROWS; i++) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        Put p = new Put(Bytes.toBytes(Integer.toString(i)));<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        for (int j = 0; j &lt; NUM_COLS; j++) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          byte[] value = new byte[50];<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          Bytes.random(value);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>          p.addColumn(FAMILY, Bytes.toBytes(Integer.toString(j)), value);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        puts.add(p);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>        if (puts.size() == 1000) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>          table.batch(puts, null);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>          puts.clear();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        }<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>      if (puts.size() &gt; 0) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        table.batch(puts, null);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @AfterClass<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static void tearDownAfterClass() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * Basic client side validation of HBASE-13262<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  @Test<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public void testScannerSeesAllRecords() throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      Scan s = new Scan();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      s.addFamily(FAMILY);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      s.setMaxResultSize(-1);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      s.setBatch(-1);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      s.setCaching(500);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      Entry&lt;Long,Long&gt; entry = sumTable(table.getScanner(s));<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      long rowsObserved = entry.getKey();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      long entriesObserved = entry.getValue();<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // Verify that we see 1M rows and 9M cells<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      assertEquals(NUM_ROWS, rowsObserved);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      assertEquals(NUM_ROWS * NUM_COLS, entriesObserved);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Basic client side validation of HBASE-13262<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @Test<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public void testSmallScannerSeesAllRecords() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      Scan s = new Scan();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      s.setSmall(true);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      s.addFamily(FAMILY);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      s.setMaxResultSize(-1);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      s.setBatch(-1);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      s.setCaching(500);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      Entry&lt;Long,Long&gt; entry = sumTable(table.getScanner(s));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      long rowsObserved = entry.getKey();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      long entriesObserved = entry.getValue();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // Verify that we see 1M rows and 9M cells<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      assertEquals(NUM_ROWS, rowsObserved);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      assertEquals(NUM_ROWS * NUM_COLS, entriesObserved);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Count the number of rows and the number of entries from a scanner<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param scanner<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   *          The Scanner<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return An entry where the first item is rows observed and the second is entries observed.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private Entry&lt;Long,Long&gt; sumTable(ResultScanner scanner) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    long rowsObserved = 0L;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    long entriesObserved = 0L;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // Read all the records in the table<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    for (Result result : scanner) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      rowsObserved++;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      while (result.advance()) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        entriesObserved++;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return Maps.immutableEntry(rowsObserved,entriesObserved);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>}<a name="line.175"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.AfterClass;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.BeforeClass;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.ClassRule;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.Test;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.experimental.categories.Category;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>@Category(LargeTests.class)<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class TestSizeFailures {<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  @ClassRule<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.46"></a>
+<span class="sourceLineNo">047</span>      HBaseClassTestRule.forClass(TestSizeFailures.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSizeFailures.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static byte [] FAMILY = Bytes.toBytes("testFamily");<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  protected static int SLAVES = 1;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static TableName TABLENAME;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final int NUM_ROWS = 1000 * 1000, NUM_COLS = 9;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @BeforeClass<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static void setUpBeforeClass() throws Exception {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    // Uncomment the following lines if more verbosity is needed for<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // debugging (see HBASE-12285 for details).<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    //((Log4JLogger)RpcServer.LOG).getLogger().setLevel(Level.ALL);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    //((Log4JLogger)RpcClient.LOG).getLogger().setLevel(Level.ALL);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    //((Log4JLogger)ScannerCallable.LOG).getLogger().setLevel(Level.ALL);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    TEST_UTIL.startMiniCluster(SLAVES);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // Write a bunch of data<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    TABLENAME = TableName.valueOf("testSizeFailures");<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    List&lt;byte[]&gt; qualifiers = new ArrayList&lt;&gt;();<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    for (int i = 1; i &lt;= 10; i++) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      qualifiers.add(Bytes.toBytes(Integer.toString(i)));<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TABLENAME)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build();<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    byte[][] splits = new byte[9][2];<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    for (int i = 1; i &lt; 10; i++) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      int split = 48 + i;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      splits[i - 1][0] = (byte) (split &gt;&gt;&gt; 8);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      splits[i - 1][0] = (byte) (split);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    TEST_UTIL.getAdmin().createTable(tableDescriptor, splits);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      List&lt;Put&gt; puts = new LinkedList&lt;&gt;();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      for (int i = 0; i &lt; NUM_ROWS; i++) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        Put p = new Put(Bytes.toBytes(Integer.toString(i)));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        for (int j = 0; j &lt; NUM_COLS; j++) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          byte[] value = new byte[50];<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          Bytes.random(value);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>          p.addColumn(FAMILY, Bytes.toBytes(Integer.toString(j)), value);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        puts.add(p);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>        if (puts.size() == 1000) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          table.batch(puts, null);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>          puts.clear();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>      if (puts.size() &gt; 0) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        table.batch(puts, null);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @AfterClass<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static void tearDownAfterClass() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Basic client side validation of HBASE-13262<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Test<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public void testScannerSeesAllRecords() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      Scan s = new Scan();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      s.addFamily(FAMILY);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      s.setMaxResultSize(-1);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      s.setBatch(-1);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      s.setCaching(500);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Entry&lt;Long,Long&gt; entry = sumTable(table.getScanner(s));<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      long rowsObserved = entry.getKey();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      long entriesObserved = entry.getValue();<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>      // Verify that we see 1M rows and 9M cells<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      assertEquals(NUM_ROWS, rowsObserved);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      assertEquals(NUM_ROWS * NUM_COLS, entriesObserved);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * Basic client side validation of HBASE-13262<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Test<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void testSmallScannerSeesAllRecords() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Connection conn = TEST_UTIL.getConnection();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try (Table table = conn.getTable(TABLENAME)) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      Scan s = new Scan();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      s.setReadType(ReadType.PREAD);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      s.addFamily(FAMILY);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      s.setMaxResultSize(-1);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      s.setBatch(-1);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      s.setCaching(500);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      Entry&lt;Long,Long&gt; entry = sumTable(table.getScanner(s));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      long rowsObserved = entry.getKey();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      long entriesObserved = entry.getValue();<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>      // Verify that we see 1M rows and 9M cells<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertEquals(NUM_ROWS, rowsObserved);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      assertEquals(NUM_ROWS * NUM_COLS, entriesObserved);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Count the number of rows and the number of entries from a scanner<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param scanner<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   *          The Scanner<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @return An entry where the first item is rows observed and the second is entries observed.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private Entry&lt;Long,Long&gt; sumTable(ResultScanner scanner) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    long rowsObserved = 0L;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    long entriesObserved = 0L;<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // Read all the records in the table<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    for (Result result : scanner) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      rowsObserved++;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      while (result.advance()) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        entriesObserved++;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return Maps.immutableEntry(rowsObserved,entriesObserved);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>}<a name="line.176"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html
deleted file mode 100644
index a85c6f0..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestSmallReversedScanner.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<!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.client;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.TableName;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.junit.After;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.junit.AfterClass;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.junit.Assert;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.junit.BeforeClass;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.junit.ClassRule;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.Test;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.experimental.categories.Category;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.Logger;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.slf4j.LoggerFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>@Category(MediumTests.class)<a name="line.36"></a>
-<span class="sourceLineNo">037</span>public class TestSmallReversedScanner {<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @ClassRule<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      HBaseClassTestRule.forClass(TestSmallReversedScanner.class);<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public static final Logger LOG = LoggerFactory.getLogger(TestSmallReversedScanner.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static final TableName TABLE_NAME = TableName.valueOf("testReversedSmall");<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static final byte[] COLUMN_FAMILY = Bytes.toBytes("columnFamily");<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static Table htable = null;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @BeforeClass<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public static void setUpBeforeClass() throws Exception {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    TEST_UTIL.startMiniCluster(1);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>    // create a table with 4 region: (-oo, b),[b,c),[c,d),[d,+oo)<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    byte[] bytes = Bytes.toBytes("bcd");<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    byte[][] splitKeys = new byte[bytes.length][];<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>    for (int i = 0; i &lt; bytes.length; i++) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      splitKeys[i] = new byte[] { bytes[i] };<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    }<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    htable = TEST_UTIL.createTable(TABLE_NAME, COLUMN_FAMILY, splitKeys);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  @AfterClass<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public static void tearDownAfterClass() throws Exception {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @After<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public void tearDown() throws IOException {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    TEST_UTIL.truncateTable(TABLE_NAME);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * all rowKeys are fit in the last region.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @throws IOException<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  @Test<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public void testSmallReversedScan01() throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    String[][] keysCases = new String[][] {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      { "d0", "d1", "d2", "d3" }, // all rowKeys fit in the last region.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      { "a0", "a1", "a2", "a3" }, // all rowKeys fit in the first region.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      { "a0", "b1", "c2", "d3" }, // each region with a rowKey<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    };<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (int caseIndex = 0; caseIndex &lt; keysCases.length; caseIndex++) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      testSmallReversedScanInternal(keysCases[caseIndex]);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      TEST_UTIL.truncateTable(TABLE_NAME);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private void testSmallReversedScanInternal(String[] inputRowKeys) throws IOException {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    int rowCount = inputRowKeys.length;<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>    for (int i = 0; i &lt; rowCount; i++) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      Put put = new Put(Bytes.toBytes(inputRowKeys[i]));<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      put.addColumn(COLUMN_FAMILY, null, Bytes.toBytes(i));<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      htable.put(put);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    Scan scan = new Scan();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    scan.setReversed(true);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    scan.setSmall(true);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    ResultScanner scanner = htable.getScanner(scan);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Result r;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    int value = rowCount;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    while ((r = scanner.next()) != null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      Assert.assertArrayEquals(r.getValue(COLUMN_FAMILY, null), Bytes.toBytes(--value));<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      Assert.assertArrayEquals(r.getRow(), Bytes.toBytes(inputRowKeys[value]));<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    Assert.assertEquals(0, value);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Corner case:<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *  HBase has 4 regions, (-oo,b),[b,c),[c,d),[d,+oo), and only rowKey with byte[]={0x00} locate in region (-oo,b) .<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   *  test whether reversed small scanner will return infinity results with RowKey={0x00}.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @throws IOException<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public void testSmallReversedScan02() throws IOException {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    Put put = new Put(new byte[] { (char) 0x00 });<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    put.addColumn(COLUMN_FAMILY, null, Bytes.toBytes(0));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    htable.put(put);<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    Scan scan = new Scan();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    scan.setCaching(1);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    scan.setReversed(true);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    scan.setSmall(true);<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ResultScanner scanner = htable.getScanner(scan);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    Result r;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    int count = 1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    while ((r = scanner.next()) != null) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      Assert.assertArrayEquals(r.getValue(COLUMN_FAMILY, null), Bytes.toBytes(0));<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      Assert.assertArrayEquals(r.getRow(), new byte[] { (char) 0x00 });<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      Assert.assertTrue(--count &gt;= 0);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Assert.assertEquals(0, count);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>}<a name="line.144"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>